2015-09-06 43 views
0

静态断言全部失败。 Constifier是什么类型的函数指针创建?将常量添加到函数指针会发生什么?

#include <type_traits> 

template<typename T> 
struct Constifier; 

template<typename T> 
struct Constifier<T *> 
{ 
    typedef const T *Type; 
}; 

int main() 
{ 
    static_assert(std::is_same<typename Constifier<int (*)()>::Type, const int (*)()>::value, ""); 
    static_assert(std::is_same<typename Constifier<int (*)()>::Type, int (*const)()>::value, ""); 
    static_assert(std::is_same<typename Constifier<int (*)()>::Type, void>::value, ""); 
} 
+1

在你的trait中,你并没有为const *指针*添加常量,而是添加了*指向*函数,但函数类型的顶级cv限定符被忽略(尽管你可以有一个指向函数的const指针,你会使用'typedef T * const Type')。顺便说一句。这里不需要'typename'关键字。 –

+0

@PiotrSkotnicki我看,它不是依赖类型。 – xiver77

回答

0

函数指针是不变的:

​​

你不能改变的功能,因为它生活在内存的代码部分,所以你可以把一个函数指针含蓄指向已经为const。

相关问题