我有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
将 avariant
作为此特定构造函数中的第二个参数,并且v
正在被隐式转换。
但是,MSVC 将尝试使用右值引用构造函数而不是使用其他构造函数,从而在尝试new
引用时导致编译错误。为什么会这样,我怎样才能让它停止?