假设我有一个类型F
。我知道F
是空的,但是F
没有默认构造函数,所以我不能使用F()
来构建它。有没有办法获得类型的有效对象F
反正?我似乎记得有人提到过有一种神秘的联合用法。理想情况下,它会是constexpr
友好的。
这可能很有用,因为无捕获 lambda 在 C++20 中仅获得默认构造函数。在 C++17 中,如果我想“将 lambda 传递给模板”并在没有实例的情况下调用该 lambda,我需要能够从类型重建它。
auto const f = [](int x) { return x; };
using F = decltype(f);
static_assert(std::is_empty_v<F>);
static_assert(!std::is_default_constructible_v<F>);
magically-construct-an-F(42);
对于您自己的类型,您可以从自身复制或移动构造对象:F f = f
。这本身不会导致 UB,请参阅CWG363.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)