On Thu, Jul 13, 2017 at 3:55 PM, Jonathan Wakely <jwakely.gcc@xxxxxxxxx> wrote: > On 13 July 2017 at 18:58, Jeffrey Walton wrote: >> I'm working on Fedora 26 with GCC 7.1.1. I'm testing some C++17 code >> and learning where some of the pain points are. >> >> $ cat test.cxx >> #include <cstddef> >> int main(int argc, char* argv[]) >> { >> std::byte b1 {0x65}; >> std::byte b2 = {0x66}; >> return 0; >> } >> >> test.cxx: In function ‘int main(int, char**)’: >> test.cxx:5:23: error: cannot convert ‘int’ to ‘std::byte’ in initialization >> std::byte b2 = {0x66}; >> ^ >> >> It seems like there should be enough information for the compiler to >> determine the list argument type and avoid the error (for b2) like in >> the first example (for b1). >> >> Is the copy-list-initialization failure expected? > > Yes. You can't initialize a scoped enumeration type with an implicit conversion. > > enum class E { }; > E e = { 0 }; // error > E e{ 0 }; // ok in C++17, error in C++14 Thanks Jonathan. The comments explain my confusion. It seemed like both should succeed, or both should fail. It looks like special accommodations were made for list-initialization under C++17. Jeff