It seems like you can't use types that have been expanded using variadic templates inside template<> brackets.
Here is some code that works fine in GCC (4.7.2) and Clang (3.2) but doesn't work in Visual Studio November CTP:
template<typename Result, typename... Args>
struct complicated_call<Result (*)(Args...)>
static Result call(Args... args)
int foo(int a)
return a + 1;
std::cout << complicated_call<int (*)(int)>::call<&foo>(5) << std::endl;
I tried to work around the issue by using
typedef Result (*FuncType)(Args...);
but that also does not work.