7

constexpr 変数の decltype が失敗するのはなぜですか?

#include <cstdint>
#include <type_traits>

constexpr uint16_t foo(){ return 0;}

constexpr auto cv = foo();
          auto v  = foo();

static_assert( std::is_same< uint16_t, decltype(cv)>::value, "!"); // failed

static_assert( std::is_same< uint16_t, decltype(v) >::value, "!"); // success
4

2 に答える 2

2

decltype(name)参照するエンティティのタイプを示しnameます。decltype((name))(これはまたはとは異なる動作であることに注意してくださいdecltype(other-expr))

変数cvには型がありますconst uint16_t( constexpr-constexprが暗黙的に宣言された変数constであるため)、これは非 const とは異なる型uint16_tです。したがって、static_assert失敗します。

于 2013-09-07T07:42:34.370 に答える