tk-xleaderのブログ。C++などプログラミングの話題が中心です。
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
U func(){ return std::declval<T>();}
という関数が有効ということを意味しますが、SFINAEでは、戻り値の有効性はチェックできませんから、これを何とか引数に持ってきます。namespace std{
namespace _details{
template<typename To>
std::void_t<To()> convert_to(To) noexcept;
template<typename From, typename To, typename = void>
struct is_nothrow_convertible_imp : std::false_type{};
template<typename From, typename To>
struct is_nothrow_convertible_imp<From, To, typename std::enable_if<noexcept(std::_details::convert_to<To>(std::declval<From>()))>::type> : std::true_type{};
}
template<typename From, typename To>
struct is_nothrow_convertible : std::conditional<
std::is_void<From>::value,
std::is_void<To>,
_details::is_nothrow_convertible_imp<From, To>
>::type{};
}
関数の引数と戻り値のどちらでも暗黙変換が起こりうる文脈ですが、