Ich habe über SFINAE Lesen und einige Beispiele mit einigen Variante der folgenden sehen:Wo bekommt ":: value" seinen Wert?
#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;
}
(Entnommen https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error)
Ich bin verwirrt, wo das value
Mitglied herkommt. Beide Definitionen von has_typedef_foobar scheinen keinen booleschen Member benannten Wert anzugeben.
Woher bekommt ::value
seinen Wert? Ich vermute, dass es sich um einen vom Compiler bereitgestellten Wert handelt und möchte darüber nachlesen, aber ich bin mir nicht sicher, welcher Begriff für Google verwendet wird, da meine Abfragen andere C++ 11-bezogene, wertbezogene Themen aufgeworfen haben.
Danke.
Betrachten Sie 'std :: true_type' und' std :: false_type'. –