导致这种“判断”不好实现。fun前半部分的is_foo操作了。operator(),返回一个bool值。traits默认值的。)还是和is_foo类似的思路,foo_traits<Bar>::has_kuerlulu就是static_false类型的别名。Ty,然后foo_traits这个类型就可以把Ty的一些“特性”提取出来。让编译器在没有kuerlulu时拒绝候选2,从而接受候选1,什么都不做;当Ty拥有kuerlulu时,拒绝候选1而接受候选2。foo_traits<Ty>::has_kuerlulu。