Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/cpp0x/decltype2.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// { dg-do compile { target c++11 } } template<typename T, typename U> struct is_same { static const bool value = false; }; template<typename T> struct is_same<T, T> { static const bool value = true; }; #define CHECK_DECLTYPE(DECLTYPE,RESULT) \ static_assert(is_same< DECLTYPE , RESULT >::value, #RESULT) struct A {}; int a; int& b = a; const int& c = a; const int d = 5; const A e = A(); CHECK_DECLTYPE(decltype(a), int); CHECK_DECLTYPE(decltype(b), int&); CHECK_DECLTYPE(decltype(c), const int&); CHECK_DECLTYPE(decltype(d), const int); CHECK_DECLTYPE(decltype(e), const A); CHECK_DECLTYPE(decltype(a), int); CHECK_DECLTYPE(decltype((a)), int&); void foo_check(int a, int& b, float& c, int* d) { CHECK_DECLTYPE(decltype(a), int); CHECK_DECLTYPE(decltype(b), int&); CHECK_DECLTYPE(decltype(c), float&); CHECK_DECLTYPE(decltype(d), int*); } int foo(char); int bar(char); int bar(int); CHECK_DECLTYPE(decltype(foo), int(char)); decltype(bar) z; // { dg-error "overload" "overload" } CHECK_DECLTYPE(decltype(&foo), int(*)(char)); CHECK_DECLTYPE(decltype(*&foo), int(&)(char)); void array_types() { int a[10]; CHECK_DECLTYPE(decltype(a), int[10]); }