片段
#include <iostream>
#include <optional>
template <typename T>
struct W {
operator T&() { return *t; }
operator bool() const {
std::cout << "called W bool operator\n";
return t != nullptr;
}
T* t;
};
int main() {
int x = 42;
W<int> w{};
w.t = &x;
if (auto w_value = w) {
std::cout << "w_value " << w_value << "\n";
} else {
std::cout << "w is empty" << "\n";
}
return 0;
}
代码在这里godbolt
我在这里想要的是,inif (auto w_value = w)
w
应该在上下文上可转换为 bool,以便赋值有效。
operator T&() { return *t; }
如果注释掉该行,则此操作将按预期工作。
但是当启用此行时,bool
转换运算符将不会被调用。
有没有办法让这段代码工作,使得如果w
转换为,那么在 if-init 表达式中将分配true
对的引用?t
我可以使用 c++20。