I just updated to GCC from trunk (r192711) and started getting some
peculiar errors. In particular, GCC seems to believe that sizeof(T) is
no longer a constant when used as an argument to an alias template.
Here's the smallest reproduction I can create with the relevant error:


template<int N>
  struct type { };

template<int N>
  using alias = type<N>;

template <typename T>
  struct use
  {
    alias<sizeof(T)> member; // <-- error: integral expression ‘sizeof
(T)’ is not constant
  };

This happens with arguments including alignof(), and various
__type_traits() also. Replacing the errant declaration with
"type<sizeof(T)>" works fine. It looks like this problem may have been
introduced during a change to instantiate template aliases inside
template definitions, because I wasn't getting this behavior in my
previous version (~1 month old? 2?).

Andrew Sutton
andrew.n.sut...@gmail.com

Reply via email to