C2143 error when compiling C++ code with variadic templates - by Michał Wawrzyniec Urbańczyk

Status : 

  Fixed<br /><br />
		This item has been fixed in the current or upcoming version of this product.<br /><br />
		A more detailed explanation for the resolution of this particular item may have been provided in the comments section.


3
0
Sign in
to vote
ID 801828 Comments
Status Closed Workarounds
Type Bug Repros 0
Opened 9/21/2013 4:20:11 PM
Access Restriction Public

Description

I found another bug affecting Qt framework. 
When I compile with Visual Studio 2013 RC the following C++ code:

#include <iostream>

template <typename...>
struct List {};

template<typename ...Args>
struct FivesGenerator {
	static inline int generateFive() {
		return 5;
	}
};

template <typename ArgList>
struct Bar {
	static const int *types() { return 0; }
};

template <typename... Args>
struct Bar<List<Args...> > {
	static const int *types() {
		static const int t[sizeof...(Args)+1] = { (FivesGenerator<Args>::generateFive())..., 1 };
		return t;
	}
};

int main() {
	std::cout << *Bar<List<int> >::types() << " " << *Bar<List<> >::types() << std::endl;
}


I get the compilation error C2143: syntax error : missing '}' before '<fake-type>'

The code should compile fine and print "5 1". It works both with GCC and Clang.
Sign in to post a comment.
Posted by Microsoft on 1/6/2014 at 7:07 AM
Hi: a fix for this issue has been checked into the compiler sources. The fix should show up in a future release of Visual C++.

Thanks
Jonathan Caves
Visual C++ Compiler Team
Posted by Microsoft on 9/21/2013 at 4:51 PM
Thank you for your feedback, we are currently reviewing the issue you have submitted. If this issue is urgent, please contact support directly(http://support.microsoft.com)