http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51194

             Bug #: 51194
           Summary: ICE about template aliasing
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: fate66...@gmail.com


compiler option: -Wall -std=c++0x
error message:

242:43: internal compiler error: tree check: expected class 'type', have
'exceptional' (error_mark) in lookup_template_class_1, at cp/pt.c:7293

code:
/*
  including, boost/mpl/and.hpp
             boost/type_traits/is_same.hpp
 */

template < bool, class T = void >
enable_if_c
{
  typedef T type;
};
template < class T >
enable_if_c<false, T>
{ };

template < class Cond, class T = void >
using enable_if = enable_if_c<Cond::value, T>;

template < template <class...> class... Conds >
struct condition_and
{
  template < class... Types >
  using enable = enable_if<boost::mpl::and_<Conds<Types>...>>;
};

template < class T, class U = T >
using Test = typename condition_and
< 
// For any two parameters meta-functions, same error occurs.
  boost::is_same
, boost::is_same
, boost::is_same
>::template enable<T, U>; // here

Reply via email to