考虑一下。有一个不可复制、不可移动的类,并且为它定义了一些谓词:
struct AA
{
AA(AA const& otehr) = delete;
AA(AA && otehr) = delete;
AA& operator = (AA const& otehr) = delete;
AA& operator = (AA && otehr) = delete;
AA(int something) { }
bool good() const { return false; }
};
由于C++17中保证复制/移动省略,我们可以拥有:
auto getA() { return AA(10); }
问题是:如何定义,如果它返回getGoodA
则将转发,否则将抛出异常?有可能吗?getA
good
auto getGoodA()
{
auto got = getA();
if (got.good()) return got; // FAILS! Move is needed.
throw std::runtime_error("BAD");
}