我正在使用 hana 来确定一个对象是否有Length
这样的成员:
using boost::hana::is_valid;
static const auto has_length
= is_valid([](const auto& obj)
-> decltype(obj.Length(),void()) {});
这很好用......我可以整天用它做静态断言,让我心满意足。所以下一步逻辑上是enable_if
一个函数:
template<typename T>
auto foo(T t) -> std::enable_if_t<has_length(t), void>
{
}
struct mine
{
int Length() const { return 0; }
};
int main()
{
foo(mine{});
}
这工作得很好....但是一旦我将 更改T
为const T&
,我们就会得到没有合适的重载的错误:godbolt
所以我的问题是:为什么会发生这种情况?