http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51210
Bug #: 51210 Summary: [C++11][DR 547] std::type_info works incorrectly with function types with cv-qualifier-seq Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: daniel.krueg...@googlemail.com CC: ja...@gcc.gnu.org gcc 4.7 20111112 (experimental) in C++11 mode outputs 1 in the following program: //--------------- #include <iostream> #include <typeinfo> typedef void FC() const; int main() { std::cout << (typeid(void()) == typeid(FC)) << std::endl; } //--------------- As of C++11 it has been clarified that FC still contains the information of a function that has a const qualifier. There is no evidence from 5.2.8 that says that void() const and void() should give std::type_info objects that evaluate to equal. The program should output 0 instead. In regard to the upcoming implementation for functions with ref-qualifier the same constraints should hold, i.e. //--------------- #include <iostream> #include <typeinfo> typedef void FLR() &; typedef void FRR() &&; int main() { std::cout << (typeid(void()) == typeid(FLR)) << std::endl; std::cout << (typeid(void()) == typeid(FRR)) << std::endl; } //--------------- should output: 0 0