call.c (convert_like_real): Check complain.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / initlist-explicit-sfinae.C
bloba2ced71a75ecdc95a93be21b8d0c193934315ad4
1 // { dg-do compile }
2 // { dg-options -std=c++11 }
3 template<typename _Tp>
4 _Tp&& declval() noexcept;
6 template<bool b>
7 struct bt {
8     static constexpr bool value = b;
9 };
11 template <typename To_, typename... From_>
12 class my_is_convertible_many {
13   private:
14     template <typename To>
15       struct indirector {
16         indirector(To);
17       };
19     template <typename To, typename... From>
20       struct tag {};
22     template <typename To, typename... From>
23       static auto test(tag<To, From...>)
24       -> decltype(indirector<To>({declval<From>()...}), bt<true>());
25     static auto test(...)
26       -> bt<false>;
28   public:
29     static constexpr bool value = decltype(test(tag<To_, From_...>()))::value;
32 struct A {};
33 struct B {};
34 struct C {};
36 struct Test {
37   Test(A, A);
38   //Test(B, B);
39   explicit Test(C, C);
40 }; 
42 int main() {    
43   static_assert(my_is_convertible_many<Test, A, A>::value,""); // true, correct
44   static_assert(!my_is_convertible_many<Test, B, B>::value,""); // false, correct
45   static_assert(!my_is_convertible_many<Test, C, C>::value,""); // error
46   return 0;