例如:
template <typename T> void g(T &&val);
int i = 0; const int ci = i;
g(i = ci);
g
的模板参数是什么?
答案 0 :(得分:6)
根据§5.18/ 1:
赋值运算符(=)和复合赋值运算符从右到左分组。所有都需要一个可修改的左值作为左操作数,并返回一个左值操作数的左值。 [...]
所以,在
g(i = ci)
返回左操作数i
,因此T
推断为int&
。
您可以通过以下代码段进行检查:
#include <type_traits>
template <typename T>
void g(T &&val) {
static_assert(std::is_same<T, int&>::value, "Nope");
}
int main() {
int i = 0; const int ci = i;
g(i = ci);
}