brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 9d0e7c4 Raw
60 lines · cpp
1// RUN:  %clang_cc1 -std=c++2a -verify %s2 3template<typename T, typename U>4constexpr static bool is_same_v = false;5 6template<typename T>7constexpr static bool is_same_v<T, T> = true;8 9template<typename T>10concept AtLeast2 = sizeof(T) >= 2;11 12template<typename T>13concept AtMost8 = sizeof(T) <= 8;14 15template<typename T>16struct S {17static int foo() requires AtLeast2<long> && AtMost8<long> {18  return 0;19}20 21static double foo() requires AtLeast2<char> {22  return 0.0;23}24 25static char bar() requires AtLeast2<char> {26  return 1.0;27}28 29static short bar() requires AtLeast2<long> && AtMost8<long> {30  return 0.0;31}32 33static int bar() requires AtMost8<long> && AtLeast2<long> {34  return 0.0;35}36 37static char baz() requires AtLeast2<char> {38  return 1.0;39}40 41static short baz() requires AtLeast2<long> && AtMost8<long> {42  return 0.0;43}44 45static int baz() requires AtMost8<long> && AtLeast2<long> {46  return 0.0;47}48 49static long baz() requires AtMost8<long> && AtLeast2<long> && AtLeast2<short> {50  return 3.0;51}52};53 54void a() {55  static_assert(is_same_v<decltype(&S<int>::foo), int(*)()>);56  static_assert(is_same_v<decltype(&S<int>::bar), long(*)()>);57  // expected-error@-1{{reference to overloaded function could not be resolved; did you mean to call it?}}58  static_assert(is_same_v<decltype(&S<int>::baz), long(*)()>);59}60