[Bug c++/63825] New: [DR 1558] Unused arguments in alias template specializations

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Nov 11 19:17:00 GMT 2014


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

            Bug ID: 63825
           Summary: [DR 1558] Unused arguments in alias template
                    specializations
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
                CC: jason at gcc dot gnu.org

http://open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1558

I managed to produce a testcase that still fails with GCC, confirming Walter's
claim that a workaround is needed to implement void_t in G++:

template<typename...> using void_t = void;

template<typename Functor, typename = void_t<>>
  struct Maybe_get_result_type
  { };

template<typename Functor>
  struct Maybe_get_result_type<Functor,
                               void_t<typename Functor::result_type>>
  { typedef typename Functor::result_type result_type; };

template<typename T>
struct wrapper
: Maybe_get_result_type<T>
{
  T* t;
};

class X { };

wrapper<X> w;


void_t.cc: In instantiation of ‘struct Maybe_get_result_type<X, void>’:
void_t.cc:13:8:   required from ‘struct wrapper<X>’
void_t.cc:21:12:   required from here
void_t.cc:10:43: error: no type named ‘result_type’ in ‘class X’
   { typedef typename Functor::result_type result_type; };
                                           ^

EDG doesn't compile this either, but Clang does.


More information about the Gcc-bugs mailing list