У меня есть следующий тестовый код.
См. Godbolt https://godbolt.org/z/fLRM8d для исполняемого примера
template <typename T> struct Traits {
static const bool value = false;
};
struct Zip{};
template <> struct Traits<Zip> {
static const bool value = true;
};
template <typename E>
void Execute(E && e){
static_assert(Traits<E>::value);
}
int main(){
auto z = Zip();
// Fails the static assertion with an lvalue
Execute(z);
// Passes the static assertion with an rvalue
Execute(Zip());
}
Что здесь происходит, что я не могу использовать свой типчерта как я ожидаю?Как правильно моделировать эту проблему?