Test compilation error
amosnier opened this issue · 5 comments
Since this repository sounded promising, I clone it and tried running the tests, but unfortunately I get a compilation error with g++ 12.2 (commit 5666e8c):
$ make -C tests/ check
make: Entering directory 'frozen/tests'
g++ -O3 -Wall -std=c++14 -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_main.o test_main.cpp
g++ -O3 -Wall -std=c++14 -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_rand.o test_rand.cpp
g++ -O3 -Wall -std=c++14 -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_set.o test_set.cpp
g++ -O3 -Wall -std=c++14 -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_map.o test_map.cpp
g++ -O3 -Wall -std=c++14 -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_unordered_set.o test_unordered_set.cpp
test_unordered_set.cpp: In function ‘void C_A_T_C_H_T_E_S_T_15()’:
test_unordered_set.cpp:195:18: error: the type ‘const frozen::unordered_set<frozen::basic_string<char>, 3, frozen::elsa<void>, C_A_T_C_H_T_E_S_T_15()::<lambda(const frozen::string&, const auto:1&)> >’ of ‘constexpr’ variable ‘set’ is not literal
195 | constexpr auto set = frozen::make_unordered_set<frozen::string>(
| ^~~
In file included from test_unordered_set.cpp:2:
../include/frozen/unordered_set.h:49:7: note: ‘frozen::unordered_set<frozen::basic_string<char>, 3, frozen::elsa<void>, C_A_T_C_H_T_E_S_T_15()::<lambda(const frozen::string&, const auto:1&)> >’ is not literal because:
49 | class unordered_set {
| ^~~~~~~~~~~~~
../include/frozen/unordered_set.h:55:18: note: non-static data member ‘frozen::unordered_set<frozen::basic_string<char>, 3, frozen::elsa<void>, C_A_T_C_H_T_E_S_T_15()::<lambda(const frozen::string&, const auto:1&)> >::equal_’ has non-literal type
55 | KeyEqual const equal_;
| ^~~~~~
test_unordered_set.cpp:191:20: note: ‘C_A_T_C_H_T_E_S_T_15()::<lambda(const frozen::string&, const auto:1&)>’ is not literal because:
191 | const auto eq = [](const frozen::string& frozen, const auto& str) {
| ^
cc1plus: note: ‘C_A_T_C_H_T_E_S_T_15()::<lambda(const frozen::string&, const auto:1&)>’ is a closure type, which is only literal in C++17 and later
make: *** [<builtin>: test_unordered_set.o] Error 1
$ g++ --version
g++ (Ubuntu 12.2.0-3ubuntu1) 12.2.0
Maybe it is easy to fix?
Thanks in advance,
Best regards,
Alain Mosnier
In fact, if I arbitrarily switch on the highest C++ standard my compiler gives me access to, so-called c++2b
in this case, the tests seem to run perfectly well:
$ make -j check
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_main.o test_main.cpp
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_rand.o test_rand.cpp
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_set.o test_set.cpp
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_map.o test_map.cpp
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_unordered_set.o test_unordered_set.cpp
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_str_set.o test_str_set.cpp
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_unordered_str_set.o test_unordered_str_set.cpp
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_unordered_map.o test_unordered_map.cpp
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_unordered_map_str.o test_unordered_map_str.cpp
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_str.o test_str.cpp
g++ -O3 -Wall -std=c++2b -march=native -Wextra -W -Werror -Wshadow -fPIC -I../include -c -o test_algorithms.o test_algorithms.cpp
g++ test_main.o test_rand.o test_set.o test_map.o test_unordered_set.o test_str_set.o test_unordered_str_set.o test_unordered_map.o test_unordered_map_str.o test_str.o test_algorithms.o -o test_main
./test_main
===============================================================================
All tests passed (3727 assertions in 55 test cases)
It still feels weird that it would suddenly start to fail with C++14 if it did not earlier. Did g++ suddenly realize that they were letting through too advanced code for C++14? Anyway, please do whatever you feel is applicable with this issue. At least, it should not be a problem for me, and I will now test this library in my current pet project. Thanks a lot for providing this.
yeah, that's weird, I'll have a look. Thanks for reporting
I don't have the issue with
% g++ --version
g++ (GCC) 12.2.1 20221121 (Red Hat 12.2.1-4)
Can you confirm #151 does the trick?