1 // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify 2 3 // This is a test for an egregious hack in Clang that works around 4 // an issue with libstdc++-4.2's <tr1/hashtable> implementation. 5 // The code in question returns 'false' from a function with a pointer 6 // return type, which is ill-formed in C++11. 7 8 #ifdef BE_THE_HEADER 9 10 #pragma GCC system_header 11 namespace std { 12 namespace tr1 { 13 template<typename T> struct hashnode; 14 template<typename T> struct hashtable { 15 typedef hashnode<T> node; 16 node *find_node() { 17 // This is ill-formed in C++11, per core issue 903, but we accept 18 // it anyway in a system header. 19 return false; 20 } 21 }; 22 } 23 } 24 25 #else 26 27 #define BE_THE_HEADER 28 #include "libstdcxx_pointer_return_false_hack.cpp" 29 30 auto *test1 = std::tr1::hashtable<int>().find_node(); 31 32 void *test2() { return false; } // expected-error {{cannot initialize}} 33 34 #endif 35