File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -70,9 +70,10 @@ ${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+ if [[ " ${GCC} " == " g++" ]]; then
7374${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
7475${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-
76+ fi
7677
7778if [[ " ${GCC} " == " g++" ]]; then
7879ls -la \
@@ -157,9 +158,7 @@ ls -la \
157158./bin/chapter03_20-002_alias.exe \
158159./bin/chapter03_21-001_span.exe \
159160./bin/chapter03_22-001_mersenne_twister_19937.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
161+ ./bin/chapter03_22-002_test_random_engines.exe
163162fi
164163
165164result_ls=$?
Original file line number Diff line number Diff line change 66//
77
88#include < iostream>
9+ #include < string>
910
1011// chapter05_06-001_template_specialization.cpp
1112
12- // The original add template function.
13+ // Generic add template function.
1314template <typename T>
14- T add (const T& a, const T& b)
15+ auto add (T a, T b) -> T
1516{
1617 return a + b;
1718}
1819
19- // Make template specializations of add() with
20- // easy-to-detect errors for float, double
21- // and long double.
22-
23- template <>
24- float add<float >(const float &, const float &)
25- {
26- // Explicitly create an erroneous result!
27- return 0 .0F ;
28- }
29-
20+ // Specialize add() for the type int.
3021template <>
31- double add<double >( const double &, const double &)
22+ auto add<int >( int a, int b) noexcept -> int
3223{
33- // Explicitly create an erroneous result!
34- return 0.0 ;
24+ return a + b;
3525}
3626
37- template <>
38- long double add<long double >(const long double &,
39- const long double &)
27+ auto main () -> int
4028{
41- // Explicitly create an erroneous result!
42- return 0 .0L ;
43- }
29+ // Add with generic template to get result "abcxyz".
30+ std::cout << add (std::string (" abc" ), std::string (" xyz" )) << std::endl;
4431
45- int main ()
46- {
47- // 3
32+ // Add with specialized template to get result 3.
4833 std::cout << add (1 , 2 ) << std::endl;
49-
50- // 0
51- std::cout << add (1 .0F , 2 .0F ) << std::endl;
5234}
You can’t perform that action at this time.
0 commit comments