2015-09-06 71 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。

相關問題