<div dir="ltr"><div>This past week, I checked in a bunch of code (and tests) having to do with the deduction guides features of C++17 - adding support for many of the standard library types. Some of the tests started failing - mostly (but not exclusively) on ARM. JF tried to fix some of the tests on Friday, but was not completely successful.</div><div><br></div><div>Today, I took a fresh look at the failures, and realized that all but one of them were on bots that were running clang-5.  It appears that clang-5 has a bug where it mis-deduces the template arguments when it is handed something that looks like a copy constructor. (Alternately, it implicitly generates an incorrect template deduction guide and uses that.)</div><div><br></div><div>A simple example is:</div><div><span style="white-space:pre">     </span>std::optional<char> o1('A');</div><div><span style="white-space:pre">    </span>std::optional o2 = o1;</div><div><span style="white-space:pre">        </span></div><div>clang6, clang7 and gcc all agree that decltype(o2) is 'std::optional<char>'.</div><div>clang5 believes that the type is 'std::optional<std::optional<char>>'.</div><div><br></div><div>This was also causing failures in the deduction tests for the container adapters, and for std::array as well.</div><div><br></div><div>I have marked these tests as UNSUPPORTED in clang5.</div><div><br></div><div>Oh yes - and that "all but one" comment above? That was a *.fail test where clang5 and clang6 give one error message, and clang7 gives a different one.  We check the error message to make sure we're "failing for the right reason".</div><div><br></div><div>    std::optional opt;</div><div><br></div><div>clang5/clang6 gives a (IMHO) bogus error here:</div><div>>    declaration of variable 'opt' with deduced type 'std::optional' requires an initializer</div><div>clang7 (and later) give a better message:</div><div>>    no viable constructor or deduction guide for deduction of template arguments of 'optional'</div><div><br></div><div>So now we look for either one.</div><div><br></div><div>I'm putting this out here so that if anyone else has trouble with implicit deduction guides in clang 5, hopefully they will find this.</div><div><br></div><div>-- Marshall</div><div><br></div></div>