0

我在 VS2017 和 g++ 上都收到此错误,编译符合 C++17。谁能解释一下?

template<typename T>
T doit(T&& arg) {
    int result{ arg * 2 };
    return result; // works
    // return arg; // works
    // return arg*2; // error: C2440 'return': cannot convert from 'int' to T
}
int main() {
    int i {42};
    cout << doit(i) << endl;
    return 0;
}
4

1 回答 1

1

typename T可以是引用类型。

std::remove_reference<T> doit(T&& arg) {应该可以解决这个问题,因为它会强制复制 return 语句,而不是潜在地尝试将 r-value ( T&&) 绑定到 l-value 引用 ( T&)。

于 2020-10-11T04:17:18.667 回答