我希望构建一个最大化函数,将较大的值转发到结果中,并保持引用类型(rvalue或lvalue)。
为什么会这样?我正在使用带有-std=c++11的GCC 4.8.2。
编辑:clang++不会发生这种情况。
#include <utility>
template<typename T>
constexpr T&& mmax(T&& left, T&& right) {
return left > right ? std::forward<T>(left) : std::forward<T>(right);
}
int main() {
mmax(1, 2);
}
但是,这个给我
max.cc: In instantiation of 'constexpr T&& mmax(T&&, T&&) [with T = int]':
max.cc:9:14: required from here
max.cc:5:72: warning: returning reference to temporary [-Wreturn-local-addr]
return left > right ? std::forward<T>(left) : std::forward<T>(right);
为什么会这样?我正在使用带有-std=c++11的GCC 4.8.2。
编辑:clang++不会发生这种情况。
template <typename T> void foo(T && a1, typename std::common_type<T>::type a2)
现在a1
通过通用引用绑定,而a2
必须能够匹配它。 - Kerrek SB