https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86135

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Based on the names I'm assuming your code is the same as a case I analysed
recently, which reduces to:

#include <vector>
#include <memory>

struct object_t {
  template <class T>
    object_t(T object)
    : obj{std::make_shared<model_t<T>>(std::move(object))}
    { }

  struct concept_t {
      virtual ~concept_t() = default;
  };

  template <class T>
    struct model_t : concept_t {
      model_t(T value) : _data{std::move(value)} {}

      T _data;
    };

    std::shared_ptr<const concept_t> obj;
};

int main() {
  std::vector<object_t> d;
  std::vector<object_t> d2;
  d.push_back(d2);
}

This crashes with a stack overflow, due to Core DR 2137. GCC appears to be
implementing the standard correctly.

Reply via email to