------- Comment #1 from jason at gcc dot gnu dot org 2010-04-21 23:57 ------- Another case, though it's a different ambiguity:
#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), ""); } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41468