次のコードは、以下の警告を示します。誰かが理由を説明できますか(完全な例を作成するために型をintに置き換えたため、コードはそのままでは役に立たないことに注意してください)。
警告: 'MaxEventSize()
'関数は 'auto
'型指定子を末尾の戻り値の型なしで使用します[デフォルトで有効]
アイデアは、特定の構造の最大サイズを取得することです(タイプはint
の場所に移動します)。
template<typename T>
constexpr T cexMax(T a, T b)
{
return (a < b) ? b : a;
}
constexpr auto MaxEventSize()
{
return cexMax(sizeof(int),
cexMax(sizeof(int),
sizeof(int)));
};
「末尾の戻り値の型なし」のauto
戻り値の型はC++ 14の機能なので、C++ 11をコンパイルしていると思います。
コードはC++ 14で問題ありませんが、C++ 11の場合、戻り値の型としてauto
を使用する場合は、このように有効な戻り値の型を記述する必要があります(注意:擬似コード)
_auto funcName (args...) -> returnType
_
sizeof()
が_std::size_t
_を返すことを知っているので、例は次のように修正できます。
_constexpr auto MaxEventSize() -> std::size_t
{
return cexMax(sizeof(int),
cexMax(sizeof(int),
sizeof(int)));
};
_
または(この場合はばかげていますが、より複雑な例で使用法を示しています)
_constexpr auto MaxEventSize() -> decltype( cexMax(sizeof(int),
cexMax(sizeof(int),
sizeof(int))) )
{
return cexMax(sizeof(int),
cexMax(sizeof(int),
sizeof(int)));
};
_