1

特殊化する予定のテンプレート化された関数があるとしましょう。そのため、基本的な実装はあまり気にしません。私はこのようなことをすることができます:

template <typename T>
T dummy() {
    assert(false);
    return declval<T>();
}

でこれを実行しようとすると、リンク エラーが発生します。

関数で参照されている未解決の外部シンボルchar const && __cdecl std::declval<char const >(void)(??$declval@$$CBD@std@@YA$$QEBDXZ)char const __cdecl dummy<char const>()

繰り返しますが、この関数は呼び出されませんが、ポインターを保存します。代わりに使用できreturn T{}、それはコンパイルされますが、のデフォルトのコンストラクターがない場合でもこれが機能する必要がありますT。これを回避する方法はありますか?

4

2 に答える 2