私は 2 つのライブラリを使用しており、便宜上、それらのライブラリが使用するいくつかの型/構造体間のコンバーターを作成しました。
template<typename T>
struct unsupportedType : std::false_type
{};
template<typename T>
FormatB getFormat()
{
static_assert(
unsupportedType<T>::value, "This is not supported!");
}
template<>
FormatB getFormat<FormatA::type1>()
{
return FormatB(//some parameters);
}
template<>
FormatB getFormat<FormatA::type2>()
{
return FormatB(//some other parameters);
}
構造体があるためunsupportedType
、コンパイラはアサーションが常に失敗することをすぐには認識せず、非特殊化バージョンがどこかで呼び出されなくてもコンパイル エラーをスローしません。ただし、コンパイラは、その後の return ステートメントがstatic_assert
不要であることも認識しません。警告を取り除くために、アサートの後に任意の return ステートメントを配置したいわけではありません。
質問:警告を取り除くためのクリーンな方法は何ですか?
ベストアンサー1
私はstatic_assertを避けるため、次のようなものを使用します。
template<typename T> FormatB getFormat()=delete;
コンパイラの作成者は、それらのエラー メッセージの改善に取り組むことができます。