http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59960
Bug ID: 59960 Summary: accepts ill-formed 'auto a1 = t1, a2 = t2;' where t1 and t2 have different template types Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: gcc at abeckmann dot de The following code is accepted by g++ in c++11 mode (tested 4.7, 4.8, 4.9): ===== 8< ===== #include <iostream> #include <typeinfo> template <typename T1, typename T2> void f(T1 & t1, T2 & t2) { auto a1 = t1, a2 = t2; std::cout << typeid(a1).name() << std::endl; std::cout << typeid(a2).name() << std::endl; } int main () { int i(23); double d(42.); f(i, d); } ===== >8 ===== the output id generates is ----- 8< ----- i d ----- >8 ----- But the standard says in [dcl.spec.auto] clause 7: If the list [...] contains more than one declarator, the type of each declared variable is determined as described above. If the type deduced [...] is not the same in each deduction, the program is ill-formed. clang fails compilation with auto2.cpp:7:2: error: 'auto' deduced as 'int' in declaration of 'a1' and deduced as 'double' in declaration of 'a2' auto a1 = t1, a2 = t2; ^ ~~ ~~