1 // PR c++/56041
2 // { dg-do compile { target c++11 } }
3 
4 template< class T, T v >
5 struct integral_constant
6 {
7   using type       = integral_constant<T,v>;
8   using value_type = T;
9   static constexpr T value  = v;
Tintegral_constant10   constexpr operator T  ( )  noexcept { return value; }
11 };
12 
13 using true_type  = integral_constant<bool, true>;
14 using false_type = integral_constant<bool, false>;
15 
16 template< bool b, class T = void >  struct enable_if  { using type = T; };
17 template< class T >                 struct enable_if<false, T>  { };
18 
19 
20 template< class T,
21 	  class = typename enable_if< true_type{}       // should compile; doesn't
22 				      , T>::type
23 	  >
24 T try_it( )  { return T{}; }
25 
26 int main( )
27 {
28   static_assert( true_type{}     , "failed test 1!" );
29   static_assert( true_type{}     , "failed test 2!" );
30   static_assert( ! false_type{}  , "failed test 3!" );
31   static_assert( !! true_type{}  , "failed test 4!" );
32 
33   return try_it<int>();
34 }
35