我有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将尝试使用右值引用构造函数而不是使用其他构造函数,导致在尝试引用new
时出现编译错误。为什么是这样,我该如何让它停止?
你有一个最小的,独立的例子吗? –
@James:不幸的是,代码是由外部程序自动生成的,我对它并不特别熟悉,所以我不确定。 – Puppy