https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38265
Geoff Romer <gromer at google dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |gromer at google dot com --- Comment #14 from Geoff Romer <gromer at google dot com> --- > The C++11 standard clarifies that this is intended to work. The range > constructors require the type to be EmplaceConstructible into the container > from the iterator's value_type But see [sequence.reqmts]/p3: "i and j denote iterators satisfying input iterator requirements and refer to elements implicitly convertible to value_type". So this is not "intended to work" per se; a conforming library could disallow it. However, the notes on LWG 536 say "Some support, not universal, for respecting the explicit qualifier", so it looks like the standard intentionally permits this as a conforming extension. In principle, I think "perfect initialization" is what's called for here: the range ctor should be explicit if and only if it uses an explicit constructor for value_type. However, I doubt it's worth the trouble (OTOH, it definitely will be worth the trouble when/if we get single-argument range constructors).