/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
#include <memory>
#include <vector>
#include <variant>
#include <optional>
template <typename T>
class A {
public:
~A() = default;
std::unique_ptr<int> ptr = nullptr;
};
template <typename T>
class B : public A<std::vector<T>> {
public:
static B<T> Create() {
return B<T>();
}
};
using AllTypes = std::variant<B<int64_t>, B<uint64_t>, B<double>>;
std::optional<AllTypes> Get() {
// Error! No viable conversion!
return B<int64_t>::Create();
}
int main() {
Get();
return 0;
}