// 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(); }