Viewing file: concepts-memtmpl6.C (973 B) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR c++/105842 // { dg-do compile { target c++20 } }
template<class T> struct S { static void func1() requires __is_same(T, int); static void func1() requires (!__is_same(T, int));
static void func2() requires false && false; static void func2() requires false;
template<class...> static void tmpl1() requires __is_same(T, int); template<class...> static void tmpl1() requires (!__is_same(T, int));
template<class... Us> static void tmpl2() requires (sizeof...(Us) == 1); template<class... Us> static void tmpl2() requires (sizeof...(Us) == 2);
static void foo() { // Both calls resolve to the first overload at instantiation time. func1(); tmpl1(); }
static void bar() { // We can check and reject both calls ahead of time since the functions' // constraints don't depend on outer template parameters. func2(); // { dg-error "no match" } tmpl2(); // { dg-error "no match" } } };
int main() { S<int>::foo(); }
|