I SFINAEについてまで読み、次のいくつかのバリエーションを持ついくつかの例を見てきました。":: value"はどこから値を取得しますか?
( https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_errorからの引用)#include <iostream>
#include <type_traits>
template <typename... Ts> using void_t = void;
template <typename T, typename = void>
struct has_typedef_foobar : std::false_type {};
template <typename T>
struct has_typedef_foobar<T, void_t<typename T::foobar>> : std::true_type {};
struct foo {
using foobar = float;
};
int main() {
std::cout << std::boolalpha;
std::cout << has_typedef_foobar<int>::value << std::endl;
std::cout << has_typedef_foobar<foo>::value << std::endl;
}
私はvalue
メンバーがどこから来るのと困惑しています。 has_typedef_foobarのどちらの定義も、valueという名前のブール値メンバーを指定していないようです。
::value
はどこですか?私はそれがコンパイラ提供の価値のいくつかのものだと思うし、それについて読んでみたいが、私の質問が他のC++ 11関連の価値関連の話題を持ち出して以来、どの言葉がGoogleにはわからない。
ありがとうございました。それぞれ
using true_type = std::integral_constant<bool, true>
using false_type = std::integral_constant<bool, false>
:
'std :: true_type'と' std :: false_type'を見てください。 –