【发布时间】:2016-05-02 13:32:31
【问题描述】:
我的问题是为什么std::is_constructible 会在当前上下文中停止?我认为std::is_constructible 的用户会期望它能够充分发挥作用并给出准确的答案。有了这个直接的上下文,你可能会让std::is_constructible 给你开绿灯,但在你实际这样做时却得到一个硬编译器错误。这不会违背std::is_constructible 的最初目标和目的吗?现在,它对我来说基本上看起来毫无用处。我猜std::looks_constructible_at_first_sight 将是当前语义的更好名称:(
【问题讨论】:
-
它简化为Reachability problem,这是NP-hard。
-
@erip Wow~ 所以,基本上不是我们不想做,而是我们这里有技术问题?但我认为简单的 SFINAE 就可以完成这项工作。没有?
-
SFINAE 也停在当前上下文。
-
@T.C.但最终,编译器将深入工作并得出一个准确的答案。我们可以利用这个事实吗?
-
首先,您可能不希望重载解决方案“深入工作”。编译时间会飙升。其次,现有实现可能无法从实例化堆栈深处的错误中优雅地恢复。看看 MSVC 与表达 SFINAE 的斗争。
标签: c++ language-lawyer c++14 template-meta-programming typetraits