私はvariant
クラスを持っています。これは、コンストラクタのペアを持っていますテンプレートタイプの控除問題
/// Construct and fill.
template <typename T>
inline
variant (const T& t)
{
YYASSERT (sizeof (T) <= S);
new (buffer.raw) T(t);
}
template <typename T>
inline
variant (T&& t)
{
YYASSERT (sizeof (T) <= S);
new (buffer.raw) T(std::move(t));
}
は、今私は、このコードでは、これらのコンストラクタを呼ばれました:それは、この特定のコンストラクタで二番目の引数だとして
parser::symbol_type
parser::make_IDENTIFIER (const Wide::ParsedFile::Identifier*& v)
{
return symbol_type (token::IDENTIFIER, v);
}
symbol_type
はvariant
を取り、v
が暗黙のうちにされています変換される。
ただし、MSVCは、他のコンストラクタを使用する代わりにrvalue参照コンストラクタを使用しようとし、new
参照を試みるとコンパイルエラーが発生します。それはなぜですか、どうすればそれを止めることができますか?
最小限のスタンドアロンの例はありますか? –
@James:残念ながら、コードは外部プログラムによって自動的に生成され、私は特にそれに精通していないので、わかりません。 – Puppy