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 на другой тип, то тоже будет работать нормально.

→ Ссылка