我一直在玩标签调度,下面的代码完全符合我的预期:
#include <type_traits>
#include <iostream>
void impl(std::true_type) { std::cout << "true\n"; }
void impl(std::false_type) { std::cout << "false\n"; }
template<typename T>
void dispatch(T&& val)
{
impl(std::is_integral<typename std::remove_reference<T>::type>());
}
int main()
{
dispatch(10); // calls impl(std::true_type)
dispatch(""); // calls impl(std::false_type)
}
但是如果我想否定这个条件,我就会遇到麻烦。我以为我可以!
在里面的代码中扔一个“” dispatch
,
impl(!std::is_integral<T>()); // added "!"
但这不会编译。
我需要做什么才能使此代码正常工作?