我有一个关于在使用时返回对本地对象的引用的编译警告visit(),但我无法理解为什么......
我使用以下代码(有点做作,但这是出于演示目的):
#include <iostream>
template <class... Ts> struct overloaded : Ts... {
using Ts::operator()...;
};
template <class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
using namespace std;
class B {
public:
B(int i) :
i_(i) {}
int get_i() const {
return i_;
}
private:
int i_;
};
class D: public B {
public:
D(int i) :
B(i) {}
};
const B& as_base(const variant<B, D>& op) {
return visit(overloaded {
[](const B& b) { return static_cast<const B&>(b); },
[](const D& d) { …Run Code Online (Sandbox Code Playgroud)