あなたは:
の両側で同じ型を返す必要があります式として三項演算子を使用できるようにするつもりはありません。また、別のパスにあるものを返す関数を持つことはできません。
これでできるのは、非タイプのテンプレートを使用してboolタイプを使用し、そのテンプレートをtrueとfalseに特化することです。これにより、同じ関数名で異なる戻り値の型を持つことができます。それはあなたに
template <bool forward> auto make_map();
template <> auto make_map<true>() { return std::map<int,int,std::less<int>>{}; }
template <> auto make_map<false>() { return std::map<int,int,std::greater<int>>{}; }
を与えるだろう行うと、あなたはこれで
int main()
{
auto map = make_map<true>();
auto reverse_map = make_map<false>();
}
だけの問題のようにそれを使用すると、テンプレートパラメータはコンパイル時に知られなければならないです。
機能は、単一の戻り値の型を持っている必要があります、あなたは間違っている変数 – Jonas
チェックしているあなたの 'return'文を確認してください – perreal
Aの代わりに高階関数を使用します関数はコンパイル時に固定の戻り値型を持たなければなりません。実行時に変更することはできません。 –