2016-03-29 81 views
1

當我嘗試自己實現的類型特徵時,我將結果與std <type_traits>進行了比較。我試圖檢查類型float (int) const,我認爲應該是功能的特徵。我得到了奇怪的結果,所以我試圖將這種類型傳遞給std類型特徵。這是我的測試代碼:float(int)的類型特徵const

該測試的
std::cout << std::is_function<float (int) const>::value; 
std::cout << std::is_compound<float(int) const>::value; 
std::cout << std::is_pointer<float(int)const>::value; 
std::cout << std::is_class<float(int)const>::value; 
std::cout << std::is_union<float(int)const>::value; 
std::cout << std::is_member_pointer<float(int)const>::value; 
std::cout << std::is_array<float(int)const>::value; 
std::cout << std::is_scalar<float(int)const>::value; 
std::cout << std::is_enum<float(int)const>::value; 
std::cout << std::is_object<float(int)const>::value; 

產量爲以下:

0100000001 

含義,這種類型的化合物是對象&,但不是標量。根據http://www.cplusplus.com/reference/type_traits/,它應該是類,聯合或數組,其中沒有一個是真的。這種類型應該是正確的結果?我正在使用MSVC 2015.

+1

你鏈接頁面的哪一部分讓你認爲'float(int)const'應該是一個類,聯合體或數組類型? – user2357112

+0

事實上,它是複合的,但不是標量的對象只留下這3種可能性。 –

+0

此外,你已經發布了10行,每行應輸出一位輸出,但只輸出8位輸出。您的代碼和輸出不匹配。 – user2357112

回答

1

這是MSVS實現中的一個錯誤; float(int) const is both function and compound

在Connect上提高它,如果它不在那裏(它似乎不是)。

我懷疑尾隨const(這應該被忽略/剝離)正在拋棄東西。

+0

似乎在模板部分專用於函數的情況下,remove_cv不起作用。 GCC實施專門針對每種可能的CV組合。 –