https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78939

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-12-28
                 CC|                            |jakub at gcc dot gnu.org,
                   |                            |jason at gcc dot gnu.org,
                   |                            |redi at gcc dot gnu.org
          Component|c++                         |libstdc++
            Summary|<tuple> interferes with     |[C++17] <tuple> interferes
                   |structured binding from     |with structured binding
                   |struct                      |from struct
     Ever confirmed|0                           |1

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
That is a consequence of the recent P0490R0 GB 20 change and <utility> having:
  /// Finds the size of a given tuple type.
  template<typename _Tp>
    struct tuple_size;

  // _GLIBCXX_RESOLVE_LIB_DEFECTS
  // 2770. tuple_size<const T> specialization is not SFINAE compatible
  template<typename _Tp, typename = void>
    struct __tuple_size_cv_impl { };

  template<typename _Tp>
    struct __tuple_size_cv_impl<_Tp,
__void_t<decltype(tuple_size<_Tp>::value)>>
    : integral_constant<size_t, tuple_size<_Tp>::value> { };

  // _GLIBCXX_RESOLVE_LIB_DEFECTS
  // 2313. tuple_size should always derive from integral_constant<size_t, N>
  template<typename _Tp>
    struct tuple_size<const _Tp> : __tuple_size_cv_impl<_Tp> { };

  template<typename _Tp>
    struct tuple_size<volatile _Tp> : __tuple_size_cv_impl<_Tp> { };

  template<typename _Tp>
    struct tuple_size<const volatile _Tp> : __tuple_size_cv_impl<_Tp> { };

http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2770

So, either the GB 20 change has been added without considering the effect on
the existing <utility>, or there is some further <utility> change needed, or
libstdc++ doesn't do what the DR requests.  But the current DR wording talks
about not having the value member, which is something GB 20 doesn't require any
more.

Reply via email to