decltype和静态模板方法

时间:2016-05-09 09:49:50

标签: c++ c++11 sfinae

在尝试使用SFINAE时,以下代码无法编译:

template<typename ObjectType, typename GroupA, typename GroupB, typename = void>
struct DelegateImpl; // default version

template<typename ObjectType, typename GroupA, typename GroupB>
struct DelegateImpl<ObjectType, GroupA, GroupB, decltype(GroupA::get<ObjectType>())>; // specialization

GCC:

  

错误:模板参数4无效

使用MSVC,更有帮助:

  

错误C3553:decltype要求表达式不是类型

我的目标是让编译器在表达式GroupA::get<ObjectType>()有效时选择专门化。

问题:如何将decltype与静态模板方法一起使用?

1 个答案:

答案 0 :(得分:6)

两个编译器都没有实际提供有用的错误。真正的问题是您在template之前错过了get关键字:

template get<ObjectType>()

请参阅Dependent Names

上的cppreference页面