【发布时间】:2014-04-28 21:55:37
【问题描述】:
我正在尝试做一个静态断言来检查两种类型 A 和 B;类 A 应该具有签名 A(B& b) 或 A(const B& b) 的公共构造函数。
如果存在公共 A(B& b) 或 A(const B& b) 或 A(B b),我希望有某种 is_constructable_from<A, B>::value 的计算结果为 true。
我想这和 boost is_convertible type_trait 有点不同。
我如何做到这一点?
我是否错过了在 Boost Type Traits 或 Concept Check 库中执行此操作的内容?
现在我需要这个来静态检查表达式 A a(b) 是一个有效的表达式,正如 Sehe 所建议的那样,它比以前的概念限制更少。欢迎为这两种情况提供解决方案。我可以使用 Boost。
【问题讨论】:
-
您的“换句话说”描述描述了/不同/要求! (隐式转换和绑定临时......)
-
请原谅我的新手 C++ 知识,但我不明白您评论的临时部分。现在我对第二个描述比第一个更严格的描述感到满意。
-
如果您的 ctor 采用
const&或一个值,它可以接受隐式转换的结果(临时)。 -
好的,我更新了我的问题。我想知道这两个概念检查的解决方案。
-
我想不到,如果你可以从 B 转换为 A,那么有 A(B)、A(B &)、A(const B &)、A(B&&) , A(const B &&) 或转换运算符,例如:B::operator A()。所以我不清楚你想禁止什么。
标签: c++ boost sfinae typetraits c++-concepts