(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
warn/
Wuninitialized-33.C
// 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(); }