我需要使用std::is_assignable
類型特徵,這種特徵在我想支持的最老的編譯器版本中不可用。由於我必須自己實現(好吧,我承認它,有一些interwebs偷看),我現在想知道這是我的實現中的錯誤還是std::is_assignable
的一般問題。爲什麼具有const成員的結構可賦值?
首先,這是我的測試結構:
struct Bar {
bool const cb; // this should kill the default assignment operator
int i;
};
,這裏是我的stdreplace::is_assignable
template <typename T> struct is_assignable : private std::__sfinae_types {
private:
template <typename T1>
static decltype(std::declval<T1>() = std::declval<T1>(),__one()) test(int);
template <typename T1>
static __two test(...);
public:
static bool const value = sizeof(test<T>(0)) == sizeof(__one);
};
然而,它告訴我,Bar
是分配:
int: 1
Bar: 1
int[2]: 0
哪裏有問題?
你有沒有嘗試改變你的布爾變量名稱是別的而不是保留關鍵字? – 2012-02-24 05:26:13
@pwny:哦,男孩。這是在問題*中的拼寫錯誤*,因爲我手工輸入了「Bar」結構。我糾正了這個問題,**謝謝**! – bitmask 2012-02-24 05:29:02
呵呵所有的好處我只是確保這不是一個奇怪的編譯器技巧,因爲這個。 – 2012-02-24 05:31:22