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
  }

Reply via email to