pre-C++ 11静的アサートを使用しようとしています。私はthisとthis質問を見つけましたが、どういうわけか、私はそれが実行されている取得カント:この静的アサートが機能しないのはなぜですか?
#define STATIC_ASSERT(x) \
do { \
const static char dummy[(x)?1:-1] = {0};\
} while(0)
struct bar {
int value;
template<typename T> void setValue(T x);
};
template<typename T> void bar::setValue(T x) { STATIC_ASSERT(1==0); }
template<> void bar::setValue(int x) { value = x;}
int main(){
bar b;
int c = 1;
b.setValue(c);
}
(GCC)の結果、これをコンパイルする私は何もしてsetValue
を呼び出す場合
error: size of array 'dummy' is negative
に、私はこのエラーが唯一apprearことを期待しますint
以外。私は他の提案されたソリューションも試しましたが、多かれ少なかれ同じ結果が得られました。テンプレートをint
以外でインスタンス化しなくても、エラーはあります。私は間違って何をしていますか?
、あなたは、このような場合には、すべてのテンプレートを使用する必要はありません知っている、と単純に 'int'タイプでそれを書く興味があるだけ? (これは教育上の理由から、まだ興味深い質問と答えですが、あなたの本当の使い方が簡単ではないと思います:))。 – Ped7g
@ Ped7gまあ、実際に私の実際の使用法は、例のように自明です。私は関数が正しい型のパラメータで呼び出され、変換は行われないことを絶対に確信したい。これが良いアプローチであろうとなかろうと、私はまだ確信していませんが、ここでの議論ではありません。私はcodereviewに入れます... – user463035818
Explictキーワードを参照してください。 – UKMonkey