前の質問。
この質問を自己完結型にするために、前の質問のコードを繰り返します。以下のコードは、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"));
}