// { dg-do compile { target c++11 } } template _Tp&& declval() noexcept; template struct bt { static constexpr bool value = b; }; template class my_is_convertible_many { private: template struct indirector { indirector(To); }; template struct tag {}; template static auto test(tag) -> decltype(indirector({declval()...}), bt()); static auto test(...) -> bt; public: static constexpr bool value = decltype(test(tag()))::value; }; struct A {}; struct B {}; struct C {}; struct Test { Test(A, A); //Test(B, B); explicit Test(C, C); }; int main() { static_assert(my_is_convertible_many::value,""); // true, correct static_assert(!my_is_convertible_many::value,""); // false, correct static_assert(!my_is_convertible_many::value,""); // error return 0; }