あるタイプが他のタイプから明示的に(あるいはその逆が)構成可能であることを確認するにはどうすればいいですか?この状況でSFINAEのトリックですか?型が明示的/暗黙的に構成可能かどうかをチェックする方法?
私はcombination of std::is_constructible
and std::is_convertible
としてis_explicitly_constructible
書くことができます。
#include <type_traits>
template <typename Type, typename Argument>
struct is_explicitly_constructible
: std::bool_constant
<
std::is_constructible<Type, Argument>::value &&
!std::is_convertible<Argument, Type>::value
>
{
};
をしかし、私はすべての可能な例は、このようなコードに考慮されていますか?
'declval'と' static_cast'を組み合わせると、ある型が別の型から変換可能かどうかが判断されるはずです。それを典型的なSFINAEテストと組み合わせると、それはそのトリックを行うはずです。 –
問題はちょうど正しいですか?そうなら、そうです。 – Barry
@SamVarshavchikしかし、私は_constructible_ではなく、_constructible_であるかどうかをチェックしたい。 'static_cast'は、クラス自身ではない型の変換をサポートしています。 – Constructor