Skip to content

Commit 4257567

Browse files
committed
More modernization
1 parent eac8cda commit 4257567

16 files changed

Lines changed: 361 additions & 145 deletions

code_snippets/chapter03/chapter03.sh

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ ${GCC} -std=${STD} -Wall -Wextra -Wpedantic -Werror -O3 -m64 -fsanitize=address
7070
${GCC} -std=${STD} -Wall -Wextra -Wpedantic -Werror -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter03_21-001_span.cpp -o ./bin/chapter03_21-001_span.exe
7171
${GCC} -std=${STD} -Wall -Wextra -Wpedantic -Werror -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter03_22-001_mersenne_twister_19937.cpp -o ./bin/chapter03_22-001_mersenne_twister_19937.exe
7272
${GCC} -std=${STD} -Wall -Wextra -Wpedantic -Werror -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter03_22-002_test_random_engines.cpp -o ./bin/chapter03_22-002_test_random_engines.exe
73+
${GCC} -std=${STD} -Wall -Wextra -Wpedantic -Werror -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter03_23-001_expected_div_int.cpp -o ./bin/chapter03_23-001_expected_div_int.exe
74+
${GCC} -std=${STD} -Wall -Wextra -Wpedantic -Werror -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter03_23-002_expected_div_integral.cpp -o ./bin/chapter03_23-002_expected_div_integral.exe
75+
7376

7477
if [[ "${GCC}" == "g++" ]]; then
7578
ls -la \
@@ -112,7 +115,9 @@ ls -la \
112115
./bin/chapter03_20-002_alias.exe \
113116
./bin/chapter03_21-001_span.exe \
114117
./bin/chapter03_22-001_mersenne_twister_19937.exe \
115-
./bin/chapter03_22-002_test_random_engines.exe
118+
./bin/chapter03_22-002_test_random_engines.exe \
119+
./bin/chapter03_23-001_expected_div_int.exe \
120+
./bin/chapter03_23-002_expected_div_integral.exe
116121
else
117122
ls -la \
118123
./bin/chapter03_01-001_declare_locals.exe \
@@ -152,7 +157,9 @@ ls -la \
152157
./bin/chapter03_20-002_alias.exe \
153158
./bin/chapter03_21-001_span.exe \
154159
./bin/chapter03_22-001_mersenne_twister_19937.exe \
155-
./bin/chapter03_22-002_test_random_engines.exe
160+
./bin/chapter03_22-002_test_random_engines.exe \
161+
./bin/chapter03_23-001_expected_div_int.exe \
162+
./bin/chapter03_23-002_expected_div_integral.exe
156163
fi
157164

158165
result_ls=$?
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
///////////////////////////////////////////////////////////////////////////////
2+
// Copyright Christopher Kormanyos 2025.
3+
// Distributed under the Boost Software License,
4+
// Version 1.0. (See accompanying file LICENSE_1_0.txt
5+
// or copy at http://www.boost.org/LICENSE_1_0.txt)
6+
//
7+
8+
#include <expected>
9+
#include <iostream>
10+
11+
// chapter03_23-001_expected_div_int.cpp
12+
13+
enum class div_error
14+
{
15+
div_none,
16+
div_by_zero
17+
};
18+
19+
template<typename T>
20+
auto safe_divide(int a, int b) noexcept -> int
21+
{
22+
if (b == 0)
23+
{
24+
return std::unexpected(div_error::div_by_zero);
25+
}
26+
else
27+
{
28+
return a / b;
29+
}
30+
}
31+
32+
auto do_something() -> void
33+
{
34+
// Division by zero.
35+
auto result = safe_divide(10, 0);
36+
37+
if (result.error() == div_error::div_by_zero)
38+
{
39+
std::cout << "Division by zero" << std::endl;
40+
}
41+
else
42+
{
43+
std::cout << "Division ok, result: " << *result << std::endl;
44+
}
45+
46+
result = safe_divide(10, 2);
47+
48+
if (result.error() == div_error::div_by_zero)
49+
{
50+
std::cout << "Division by zero" << std::endl;
51+
}
52+
else
53+
{
54+
// Division ok, result: 5
55+
std::cout << "Division ok, result: " << *result << std::endl;
56+
}
57+
}
58+
59+
auto main() -> int
60+
{
61+
do_something();
62+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
///////////////////////////////////////////////////////////////////////////////
2+
// Copyright Christopher Kormanyos 2025.
3+
// Distributed under the Boost Software License,
4+
// Version 1.0. (See accompanying file LICENSE_1_0.txt
5+
// or copy at http://www.boost.org/LICENSE_1_0.txt)
6+
//
7+
8+
#include <expected>
9+
#include <iostream>
10+
11+
// chapter03_23-001_expected_div_int.cpp
12+
13+
enum class div_error
14+
{
15+
div_none,
16+
div_by_zero
17+
};
18+
19+
template<typename T>
20+
auto safe_divide(T a, T b)
21+
-> std::enable_if_t<std::is_integral_v<T>,
22+
std::expected<T, div_error>>
23+
{
24+
if (b == T { 0 })
25+
{
26+
return std::unexpected(div_error::div_by_zero);
27+
}
28+
else
29+
{
30+
return a / b;
31+
}
32+
}
33+
34+
auto do_something() -> void
35+
{
36+
// Division by zero.
37+
auto result = safe_divide(10U, 0U);
38+
39+
if (result.error() == div_error::div_by_zero)
40+
{
41+
std::cout << "Division by zero" << std::endl;
42+
}
43+
else
44+
{
45+
std::cout << "Division ok, result: " << *result << std::endl;
46+
}
47+
48+
result = safe_divide(10, 2);
49+
50+
if (result.error() == div_error::div_by_zero)
51+
{
52+
std::cout << "Division by zero" << std::endl;
53+
}
54+
else
55+
{
56+
// Division ok, result: 5
57+
std::cout << "Division ok, result: " << *result << std::endl;
58+
}
59+
}
60+
61+
auto main() -> int
62+
{
63+
do_something();
64+
}

code_snippets/chapter05/chapter05.sh

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,18 @@ $GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion
3636
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_05-002_template_point.cpp -o ./bin/chapter05_05-002_template_point.exe
3737
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_05-003_template_point.cpp -o ./bin/chapter05_05-003_template_point.exe
3838
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_06-001_template_specialization.cpp -o ./bin/chapter05_06-001_template_specialization.exe
39-
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_06-002_template_point.cpp -o ./bin/chapter05_06-002_template_point.exe
39+
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_06-002_template_enable_if.cpp -o ./bin/chapter05_06-002_template_enable_if.exe
40+
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_06-003_template_concepts.cpp -o ./bin/chapter05_06-003_template_concepts.exe
41+
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_06-004_template_point.cpp -o ./bin/chapter05_06-004_template_point.exe
4042
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_07-001_led_static_polymorphism.cpp -o ./bin/chapter05_07-001_led_static_polymorphism.exe
4143
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_08-001_using_the_stl.cpp -o ./bin/chapter05_08-001_using_the_stl.exe
4244
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_08-002_using_the_stl_algo.cpp -o ./bin/chapter05_08-002_using_the_stl_algo.exe
4345
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_08-003_std_for_each.cpp -o ./bin/chapter05_08-003_std_for_each.exe
4446
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_09-001_factory_simple.cpp -o ./bin/chapter05_09-001_factory_simple.exe
4547
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_09-002_factory_variadic_template.cpp -o ./bin/chapter05_09-002_factory_variadic_template.exe
4648
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_10-001_metaprogram_factorial.cpp -o ./bin/chapter05_10-001_metaprogram_factorial.exe
47-
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_10-002_metaprogram_pow10.cpp -o ./bin/chapter05_10-002_metaprogram_pow10.exe
48-
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_10-003_metaprogram_inner_product.cpp -o ./bin/chapter05_10-003_metaprogram_inner_product.exe
49+
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_10-002_const_eval_pow10.cpp -o ./bin/chapter05_10-002_const_eval_pow10.exe
50+
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_10-003_const_eval_inner_product.cpp -o ./bin/chapter05_10-003_const_eval_inner_product.exe
4951
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_11-001_tuple_things_simple.cpp -o ./bin/chapter05_11-001_tuple_things_simple.exe
5052
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_11-002_tuple_things_metaprogram.cpp -o ./bin/chapter05_11-002_tuple_things_metaprogram.exe
5153
$GCC -std=$STD -Wall -Wextra -Wpedantic -Werror -Wconversion -Wsign-conversion -O3 -m64 -fsanitize=address -fsanitize=shift -fsanitize=shift-exponent -fsanitize=shift-base -fsanitize=integer-divide-by-zero -fsanitize=null -fsanitize=signed-integer-overflow -fsanitize=bounds -fsanitize=alignment -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=enum ./chapter05_11-003_tuple_things_metaprogram.cpp -o ./bin/chapter05_11-003_tuple_things_metaprogram.exe
@@ -67,16 +69,18 @@ ls -la \
6769
./bin/chapter05_05-002_template_point.exe \
6870
./bin/chapter05_05-003_template_point.exe \
6971
./bin/chapter05_06-001_template_specialization.exe \
70-
./bin/chapter05_06-002_template_point.exe \
72+
./bin/chapter05_06-002_template_enable_if.exe \
73+
./bin/chapter05_06-003_template_concepts.exe \
74+
./bin/chapter05_06-004_template_point.exe \
7175
./bin/chapter05_07-001_led_static_polymorphism.exe \
7276
./bin/chapter05_08-001_using_the_stl.exe \
7377
./bin/chapter05_08-002_using_the_stl_algo.exe \
7478
./bin/chapter05_08-003_std_for_each.exe \
7579
./bin/chapter05_09-001_factory_simple.exe \
7680
./bin/chapter05_09-002_factory_variadic_template.exe \
7781
./bin/chapter05_10-001_metaprogram_factorial.exe \
78-
./bin/chapter05_10-002_metaprogram_pow10.exe \
79-
./bin/chapter05_10-003_metaprogram_inner_product.exe \
82+
./bin/chapter05_10-002_const_eval_pow10.exe \
83+
./bin/chapter05_10-003_const_eval_inner_product.exe \
8084
./bin/chapter05_11-001_tuple_things_simple.exe \
8185
./bin/chapter05_11-002_tuple_things_metaprogram.exe \
8286
./bin/chapter05_11-003_tuple_things_metaprogram.exe \

code_snippets/chapter05/chapter05_06-001_template_specialization.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
///////////////////////////////////////////////////////////////////////////////
2-
// Copyright Christopher Kormanyos 2017 - 2018.
2+
// Copyright Christopher Kormanyos 2017 - 2025.
33
// Distributed under the Boost Software License,
44
// Version 1.0. (See accompanying file LICENSE_1_0.txt
55
// or copy at http://www.boost.org/LICENSE_1_0.txt)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
///////////////////////////////////////////////////////////////////////////////
2+
// Copyright Christopher Kormanyos 2017 - 2025.
3+
// Distributed under the Boost Software License,
4+
// Version 1.0. (See accompanying file LICENSE_1_0.txt
5+
// or copy at http://www.boost.org/LICENSE_1_0.txt)
6+
//
7+
8+
#include <iostream>
9+
10+
// chapter05_06-002_template_enable_if.cpp
11+
12+
// The original add template function.
13+
template<typename T>
14+
auto add(T a, T b) noexcept
15+
-> std::enable_if_t<!std::is_floating_point_v<T>, T>
16+
{
17+
return a + b;
18+
}
19+
20+
// Easy-to-detect errors for float, double
21+
// and long double.
22+
23+
template<typename T>
24+
auto add(T, T) noexcept
25+
-> std::enable_if_t<std::is_floating_point_v<T>, T>
26+
{
27+
// Explicitly create an erroneous result!
28+
return T { 0.0F };
29+
}
30+
31+
auto main() -> int;
32+
33+
auto main() -> int
34+
{
35+
// 3
36+
std::cout << add(1, 2) << std::endl;
37+
38+
// 0
39+
std::cout << add(1.0F, 2.0F) << std::endl;
40+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
///////////////////////////////////////////////////////////////////////////////
2+
// Copyright Christopher Kormanyos 2025.
3+
// Distributed under the Boost Software License,
4+
// Version 1.0. (See accompanying file LICENSE_1_0.txt
5+
// or copy at http://www.boost.org/LICENSE_1_0.txt)
6+
//
7+
8+
#include <concepts>
9+
#include <string>
10+
#include <type_traits>
11+
12+
// chapter05_06-003_template_concepts.cpp
13+
14+
// Generic add template function.
15+
template<typename T>
16+
auto add(T a, T b) -> T
17+
{
18+
return a + b;
19+
}
20+
21+
template<typename T>
22+
requires std::integral<T>
23+
auto add(T a, T b) -> T
24+
{
25+
return a + b;
26+
}
27+
28+
auto do_something() -> void
29+
{
30+
// 3U
31+
const unsigned c { add(1U, 2U) };
32+
33+
// abcxyz
34+
const std::string str
35+
{ add(std::string("abc"), std::string("xyz")) };
36+
}
37+
38+
auto main() -> int
39+
{
40+
do_something();
41+
}

code_snippets/chapter05/chapter05_06-002_template_point.cpp renamed to code_snippets/chapter05/chapter05_06-004_template_point.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
///////////////////////////////////////////////////////////////////////////////
2-
// Copyright Christopher Kormanyos 2017 - 2023.
2+
// Copyright Christopher Kormanyos 2017 - 2025.
33
// Distributed under the Boost Software License,
44
// Version 1.0. (See accompanying file LICENSE_1_0.txt
55
// or copy at http://www.boost.org/LICENSE_1_0.txt)
66
//
77

8-
// chapter05_06-002_template_point.cpp
8+
// chapter05_06-004_template_point.cpp
99

1010
#include <cstdint>
1111
#include <iostream>

0 commit comments

Comments
 (0)