この単純なクラスを考えてみましょう:
template<class T>
class Foo{
public:
Foo(T const& val)
: _val(val) {}
template<class U>
Foo(Foo<U> const&){
static_assert(false,"Cannot convert from Foo<U> to Foo<T>.");
}
operator T&() { return _val; }
operator T const&() const{ return _val; }
private:
T _val;
};
テンプレート型からの暗黙的な構築と、単純なラッパーであるその型への暗黙的な変換を許可します。
今、関係のない s 間の変換を有効にしたくありませんFoo
。これは、これらの暗黙的な構築/変換のために可能になります。テンプレート化された copy-ctor を非公開にすることはできますが、static_assert
.
問題は、ここで Ideoneに示されているようstatic_assert
に、タイプをコピーしようとしても失敗することです! Visual Studio では、必要な動作が得られますが、これは VS がテンプレートを解析する方法によるものだと思います。これを機能させる方法はありますか?