C++ Cygwin std::如果分析错误,则启用

C++ Cygwin std::如果分析错误,则启用,c++,c++11,gcc,cygwin,C++,C++11,Gcc,Cygwin,我尝试使用gcc 4.9.2在cygwin下编译以下代码: #include <type_traits> template <template <typename...> class C, typename... Ts> class Foo { template <typename T> struct IsFoo : std::true_type {}; template<typename T> typename st

我尝试使用gcc 4.9.2在cygwin下编译以下代码:

#include <type_traits>

template <template <typename...> class C, typename... Ts>
class Foo
{
    template <typename T> struct IsFoo : std::true_type {};
    template<typename T> typename std::enable_if<IsFoo<T>::value>::type bar(T v);
};

template <template <typename...> class C, typename... Ts>
template <typename T>
typename std::enable_if<Foo<C, Ts...>::IsFoo<T>::value>::type 
Foo<C, Ts...>::bar(T v)
{
    return;
}
我得到了以下错误:

$ gcc -std=c++11 b.cpp
b.cpp:13:15: error: parse error in template argument list
 typename std::enable_if<Foo<C, Ts...>::IsFoo<T>::value>::type
               ^
b.cpp:13:48: error: too many template-parameter-lists
 typename std::enable_if<Foo<C, Ts...>::IsFoo<T>::value>::type
                                                ^

奇怪的是,代码是在Linux gcc 4.8.3下编译的。我的Cygwin环境或编译器可能有什么问题?

解析错误是因为:

template <template <typename...> class C, typename... Ts>
template <typename T>
typename std::enable_if<Foo<C, Ts...>::IsFoo<T>::value>::type 
Foo<C, Ts...>::bar(T v) { /**/ }
应该是:

template <template <typename...> class C, typename... Ts>
template <typename T>
typename std::enable_if<Foo<C, Ts...>::template IsFoo<T>::value>::type 
//                                     ~~~~~~~^
Foo<C, Ts...>::bar(T v) { /**/ }

中所述,是的,这就是问题所在。谢谢