【发布时间】:2018-06-14 17:49:35
【问题描述】:
我有一个结构,它可以作为其他类型的包装器,如下所示:
template<typename T>
struct A {
A& operator=(const T& value){
m_value = value;
return *this;
}
operator T() const {
return m_value;
}
private:
T m_value;
};
我是这样使用的:
int main() {
A<int> a;
a = 5; // Copy assignment constructor
std::cout << a << "\n"; // Implicit conversion to int
}
按预期工作。使用非基本类型时会出现我的问题,如下例所示:
int main() {
A<std::complex<int>> c;
c = std::complex<int>(2, 2);
std::cout << c << "\n";
}
上面的 sn-p 引发了 invalid operands to binary expression 错误。
为什么会出现这个错误?为什么std::complex<int> 的重载运算符<< 不与隐式转换的A<std::complex<int>> 一起使用?
【问题讨论】:
-
它适用于
A的非模板模板参数,它不适用于模板模板参数。见coliru.stacked-crooked.com/a/8ad05b4b564bab1b -
@YSC 很棒的观察!随意编辑这个问题的标题。
标签: c++ template-argument-deduction