Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/template/sfinae17.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
// The conversion from D* to B* is ambiguous, but that should not produce // an error, it should remove the first f overload by SFINAE. #define static_assert(TEST,STR) \ do { int ar[(TEST)?1:-1]; } while (0); struct B {}; struct B1 : B {}; struct B2 : B {}; struct D : B1, B2 {}; template <class T> T create(); typedef char one[1]; typedef char two[2]; template <class T> one &f(char (*)[sizeof static_cast<T>(create<D *>())]); template <class T> two &f(...); int main() { static_assert(sizeof f<int>(0) == sizeof(two), ""); static_assert(sizeof f<B *>(0) == sizeof(two), ""); }