blob: 1bb0639ee300f2acc73137c0201ec58561d65a60 [file] [log] [blame]
// PR102801
// { dg-do compile }
// { dg-require-effective-target c++17 }
// { dg-options "-O2 -Wall" }
#include <algorithm>
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include <vector>
class C {
bool b{}; // { dg-bogus "uninitialized" }
struct Shared {};
using SharedPtr = std::shared_ptr<const Shared>;
SharedPtr shared;
public:
C() = delete;
C(bool bIn) : b(bIn) {}
~C();
int someMethod() const;
};
using OptC = std::optional<C>;
class C2 {
OptC c;
public:
C2() = default;
C2(const C &cIn) : c(cIn) {}
~C2();
void operator()() const;
void swap(C2 &o) { std::swap(c, o.c); }
};
template <typename T>
class Q {
std::vector<T> queue;
public:
void Add(std::vector<T> &items) {
for (T & item : items) {
queue.push_back(T());
item.swap(queue.back());
}
}
void Exec();
};
extern void foo(Q<C2> & q, std::vector<C2> &items);
void foo(Q<C2> & q, std::vector<C2> &items) { q.Add(items); q.Exec(); }