1 // PR c++/90711
2 // { dg-do compile { target c++11 } }
3 
4 namespace test {
5     void EXISTS(int);
6 }
7 
8 template<typename... ARGS>
9 struct stub_void {
10     typedef void type;
11 };
12 template<typename... ARGS>
13 using stub_void_t = typename stub_void<ARGS...>::type;
14 
15 #if !defined(SUPPRESS)
16 template<typename O, typename = void>
17 struct has_to_string {
18     static constexpr bool value = false;
19 };
20 
21 template<typename O>
22 struct has_to_string<O, stub_void_t<decltype(EXISTS(O{}))>> {
23     static constexpr bool value = true;
24 };
25 #endif
26 
27 template<typename O, typename = void>
28 struct has_std_to_string {
29     static constexpr bool value = false;
30 };
31 
32 template<typename O>
33 struct has_std_to_string<O, stub_void_t<decltype(test::EXISTS(O{}))>> {
34     static constexpr bool value = true;
35 };
36 
37 static_assert (has_std_to_string<int>::value, "");
38 
39