我重复上一个问题的代码以使这个问题自成一体。如果使用 gcc 4.8.3 编译下面的代码,它不会发出任何警告。与-std=c++1y
. -std=c++0x
但是,如果使用标志编译,它会发出警告。在上一个问题的上下文中,有人说代码不能使用 gcc 4.9.0 编译。不幸的是,目前,我并不完全了解它auto
是如何实现的。因此,如果有人能回答以下问题,我将不胜感激:
1)。相对于 C++14 标准,下面的代码是有效的 C++ 吗?
2)。如果是的话,这段代码会被认为是一种好的风格吗?如果不是,为什么不呢?
3)。为什么在使用 C++11 编译器时下面的代码会编译和工作(有时)?或者,为什么它并不总是有效?是否有任何特定的标志/选项/设置可以阻止它工作?
template<int N> auto getOutputPort2();
template<> auto getOutputPort2<0>();
template<> auto getOutputPort2<1>();
template<>
auto getOutputPort2<0>()
{
return std::unique_ptr<int>(new int(10));
}
template<>
auto getOutputPort2<1>()
{
return std::unique_ptr<string>(new string("qwerty"));
}