特殊化する予定のテンプレート化された関数があるとしましょう。そのため、基本的な実装はあまり気にしません。私はこのようなことをすることができます:
template <typename T>
T dummy() {
assert(false);
return declval<T>();
}
visual-studio-2017でこれを実行しようとすると、リンク エラーが発生します。
関数で参照されている未解決の外部シンボル
char const && __cdecl std::declval<char const >(void)
(??$declval@$$CBD@std@@YA$$QEBDXZ)char const __cdecl dummy<char const>()
繰り返しますが、この関数は呼び出されませんが、ポインターを保存します。代わりに使用できreturn T{}
、それはコンパイルされますが、のデフォルトのコンストラクターがない場合でもこれが機能する必要がありますT
。これを回避する方法はありますか?