undefined reference to std::tuple >::tuple()
Почему этот код с cppreference выдаёт ошибку? Как исправить?
#include <tuple>
#include <string>
#include <any>
template<class... Args>
struct B : std::tuple<Args...>, Args... {};
B b{ std::tuple<std::any, std::string>{}, std::any{} };
int main(){}
undefined reference to std::tuple<std::any, std::__cxx11::basic_string<char, std::char_traits, std::allocator > >::tuple<true, true>()
Ответы (1 шт):
Автор решения: αλεχολυτ
→ Ссылка
В данном случае имеет место быть какой-то баг gcc при наследовании от std::tuple<std::string> и агрегатной инициализации.
Упрощённый код, который сбоит подобным образом в gcc 11.1:
#include <tuple>
#include <string>
using T = std::tuple<std::string>;
struct B : T {};
B b {T{}};
int main() {}
undefined reference to `std::tuple<std::__cxx11::basic_string<char, std::char_traits, std::allocator > >::tuple<void, true>()'
Но запускается нормально на gcc 10.3.
Если в вашем примере заменить std::string на другой тип, то тоже будет работать нормально.