public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/104850] New: Instantiating a destructor for a template class too early, before the calling destructor is seen - rejects valid code
@ 2022-03-08 23:33 kirshamir at gmail dot com
  2022-03-09  9:23 ` [Bug c++/104850] " rguenth at gcc dot gnu.org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: kirshamir at gmail dot com @ 2022-03-08 23:33 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 104850
           Summary: Instantiating a destructor for a template class too
                    early, before the calling destructor is seen - rejects
                    valid code
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kirshamir at gmail dot com
  Target Milestone: ---

The following code is rejected as trying to use incomplete type, while when the
actual use would actually appear the type would be complete:

template<typename T>
struct uptr {
    uptr(nullptr_t) {}
    ~uptr() {
        delete (new T);
    }
};

class A
{
public:
  A();
  ~A();
private:
  class B;
  uptr<B> m_b = nullptr; // the dtor of uptr tries to be instantiated here
};

If we change the initialization of:
uptr<B> m_b = nullptr; 
To:
uptr<B> m_b {nullptr}; 

The destructor instantiation is delayed, till ~A() is seen, and the code can be
compiled.

See:
https://stackoverflow.com/questions/71397495/why-does-default-member-initializer-request-instantiation-of-unique-ptr-destru

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-03-07  4:52 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-08 23:33 [Bug c++/104850] New: Instantiating a destructor for a template class too early, before the calling destructor is seen - rejects valid code kirshamir at gmail dot com
2022-03-09  9:23 ` [Bug c++/104850] " rguenth at gcc dot gnu.org
2022-03-09  9:34 ` kirshamir at gmail dot com
2022-03-10  4:35 ` pinskia at gcc dot gnu.org
2022-03-10  4:41 ` pinskia at gcc dot gnu.org
2024-02-23 14:29 ` de34 at live dot cn
2024-03-05 12:30 ` benni.buch at gmail dot com
2024-03-05 12:31 ` benni.buch at gmail dot com
2024-03-07  4:52 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).