std::is_assignable
タイプの特性を使用する必要がありました。これは、サポートしたい最も古いコンパイラバージョンでは使用できません。私はこれを実装しなければならなかったので(私はそれを認めます、いくつかのinterwebsが覗いていました)、これは私の実装のバグかstd::is_assignable
の一般的な問題かどうか疑問に思います。constメンバを持つ構造体を割り当てることができるのはなぜですか?
まず第一に、これは私のテスト構造体されています。しかし、それは私に語った、Bar
が割り当て可能である
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);
};
さ:
int: 1
Bar: 1
int[2]: 0
問題はどこだ?
ブール変数名を予約済みのキーワード以外に変更しようとしましたか? –
@pwny:ああ男の子。私は 'Bar'構造体を手作業でタイプしたので、これは*の質問では*でした。私はこの問題を修正しました**ありがとうございました**! – bitmask
Hehe all good私はちょうどこれがいくつかの奇妙なコンパイラのトリックはこれのために動作していないことを確認していた。 –