https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119620
--- Comment #5 from 康桓瑋 <hewillk at gmail dot com> --- (In reply to Jonathan Wakely from comment #1) > (In reply to 康桓瑋 from comment #0) > > I don't know why the standard sometimes constrains emplace(), sometimes only > > constrains insert(), and sometimes constrains neither. > > flat_set::emplace is not specified to unconditionally construct an object > outside the container (even though for some calls to emplace it does need to > do that). > Thanks for the explanation. This might be a silly question, even if we construct the object T *internally*, doesn't that still mean we need is_constructible_v<value_type, Args...> to guarantee that T can be constructed via Args...?