https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71096
Roman Perepelitsa <roman.perepelitsa at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |roman.perepelitsa at gmail dot com --- Comment #1 from Roman Perepelitsa <roman.perepelitsa at gmail dot com> --- Slightly simpler example (no user-defined templates): #include <tuple> struct A {}; struct B : std::tuple<A> {}; int main() { std::tuple<B> t; std::get<0>(t); // compile error } Note that both A and B are empty in the sense of std::is_empty. If you make either of them non-empty by adding a data member, the code will compile. #include <tuple> struct A { char c; }; // not empty struct B : std::tuple<A> {}; int main() { std::tuple<B> t; std::get<0>(t); // compiles } Likewise, the code compiles when getting the element by type instead of index. #include <tuple> struct A {}; struct B : std::tuple<A> {}; int main() { std::tuple<B> t; std::get<B>(t); // compiles }