static_assert を使用するときに、戻り式がないという警告を回避するにはどうすればよいでしょうか? 質問する

static_assert を使用するときに、戻り式がないという警告を回避するにはどうすればよいでしょうか? 質問する

私は 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;

コンパイラの作成者は、それらのエラー メッセージの改善に取り組むことができます。

おすすめ記事