建议here以下列方式实施:
template<class Ret, class... Args>
struct is_function<Ret(Args...)const> : std::true_type {};
template<class Ret, class... Args>
struct is_function<Ret(Args...)volatile> : std::true_type {};
但它是一个有效的函数语法吗? Visual Studio 2013出错:
error C2270: 'abstract declarator' : modifiers not allowed on nonmember functions
答案 0 :(得分:3)
函数参数之后的const
或volatile
称为cv-qualifier-seq。
C ++ 14标准的第8.3.5节第6节说:
具有cv-qualifier-seq或ref-qualifier的函数类型(包括 由typedef-name(7.1.3,14.1)命名的类型只能出现:
- 非静态成员函数的函数类型
- 指向成员的指针引用的函数类型,
- 函数typedef声明或别名声明的顶级函数类型
- type-parameter(14.1)的默认参数中的type-id,或
- type-parameter(14.3.1)的template-argument的type-id。
在您的示例中,Ret(Args...)const
和Ret(Args...)volatile
符合最后一种情况。