<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Sorry for slacking off on this.  I have now tested D25389, and the number of unexpected test failures is reduced by 20. :-)</div><div class=""><br class=""></div><div class="">The trivial_copy_move.pass.cpp tests already failed before D25389, and it does not influence them.  They should be disabled on FreeBSD for now, indeed.</div><div class=""><br class=""></div><div class="">Thanks for the nice fix!</div><div class=""><br class=""></div><div class="">-Dimitry</div><br class=""><div><blockquote type="cite" class=""><div class="">On 10 Oct 2016, at 06:59, Eric Fiselier <<a href="mailto:eric@efcs.ca" class="">eric@efcs.ca</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><br class=""><div class="gmail_extra"><br class=""><div class="gmail_quote">On Sat, Oct 8, 2016 at 7:44 AM, Krzysztof Parzyszek <span dir="ltr" class=""><<a href="mailto:kparzysz@codeaurora.org" target="_blank" class="">kparzysz@codeaurora.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This patch works very well.  The infinite cleverness delivers again!  :)<br class="">
<br class="">
There are still some failures left in check-libcxx, but they seem unrelated, except one:<br class=""></blockquote><div class=""><br class=""></div><div class=""><br class=""></div><div class="">That error is related, but it's not really a problem, the tests just need to be disabled for FreeBSD.</div><div class="">The standard requires std::pair be a trivial type when its template argument types are, but as mentioned above</div><div class="">implementing this is ABI breaking.</div><div class=""><br class=""></div><div class="">/Eric</div><div class=""><br class=""></div><div class=""> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br class="">
<br class="">
/usr/bin/CC -o /w/bld/org/projects/libcxx/tes<wbr class="">t/std/utilities/utility/pairs/<wbr class="">pairs.pair/Output/trivial_copy<wbr class="">_move.pass.cpp.o -x c++ /w/src/<a href="http://llvm.org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/utilities/utility/p<wbr class="">airs/pairs.pair/trivial_copy_m<wbr class="">ove.pass.cpp</a> -c -v -Werror=thread-safety -std=c++1z -nostdinc++ -include /w/src/<a href="http://llvm.org/projects/libcxx/test/support/nasty_macros.hpp" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/support/nasty_macros.hp<wbr class="">p</a> -I/w/src/<a href="http://llvm.org/projects/libcxx/include" rel="noreferrer" target="_blank" class="">llvm.org/projects/lib<wbr class="">cxx/include</a> -I/w/src/<a href="http://llvm.org/projects/libcxx/test/support" rel="noreferrer" target="_blank" class="">llvm.org/projects/lib<wbr class="">cxx/test/support</a> -DLIBCXX_FILESYSTEM_STATIC_TES<wbr class="">T_ROOT="/w/src/<a href="http://llvm.org/projects/libcxx/test/std/experimental/filesystem/Inputs/static_test_env" rel="noreferrer" target="_blank" class="">llvm.org/projec<wbr class="">ts/libcxx/test/std/experimenta<wbr class="">l/filesystem/Inputs/static_tes<wbr class="">t_env</a>" -DLIBCXX_FILESYSTEM_DYNAMIC_TE<wbr class="">ST_ROOT="/w/bld/org/projects/l<wbr class="">ibcxx/test/filesystem/Output/d<wbr class="">ynamic_env" -DLIBCXX_FILESYSTEM_DYNAMIC_TE<wbr class="">ST_HELPER="/usr/local/bin/pyth<wbr class="">on2.7 /w/src/<a href="http://llvm.org/projects/libcxx/test/support/filesystem_dynamic_test_helper.py" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/support/filesystem_dyna<wbr class="">mic_test_helper.py</a>" -c<br class="">
<br class="">
<br class="">
FreeBSD clang version 3.8.0 (tags/RELEASE_380/final 262564) (based on LLVM 3.8.0)<span class=""><br class="">
Target: x86_64-unknown-freebsd11.0<br class="">
Thread model: posix<br class=""></span>
InstalledDir: /usr/bin<br class="">
 "/usr/bin/c++" -cc1 -triple x86_64-unknown-freebsd11.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name trivial_copy_move.pass.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -v -dwarf-column-info -debugger-tuning=gdb -coverage-file /w/bld/org/projects/libcxx/tes<wbr class="">t/std/utilities/utility/pairs/<wbr class="">pairs.pair/Output/trivial_copy<wbr class="">_move.pass.cpp.o -nostdinc++ -resource-dir /usr/bin/../lib/clang/3.8.0 -include /w/src/<a href="http://llvm.org/projects/libcxx/test/support/nasty_macros.hpp" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/support/nasty_macros.hp<wbr class="">p</a> -I /w/src/<a href="http://llvm.org/projects/libcxx/include" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include</a> -I /w/src/<a href="http://llvm.org/projects/libcxx/test/support" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/support</a> -D LIBCXX_FILESYSTEM_STATIC_TEST_<wbr class="">ROOT=/w/src/<a href="http://llvm.org/projects/libcxx/test/std/experimental/filesystem/Inputs/static_test_env" rel="noreferrer" target="_blank" class="">llvm.org/projects/<wbr class="">libcxx/test/std/experimental/f<wbr class="">ilesystem/Inputs/static_test_e<wbr class="">nv</a> -D LIBCXX_FILESYSTEM_DYNAMIC_TEST<wbr class="">_ROOT=/w/bld/org/projects/libc<wbr class="">xx/test/filesystem/Output/dyna<wbr class="">mic_env -D LIBCXX_FILESYSTEM_DYNAMIC_TEST<wbr class="">_HELPER=/usr/local/bin/python2<wbr class="">.7 /w/src/<a href="http://llvm.org/projects/libcxx/test/support/filesystem_dynamic_test_helper.py" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/support/filesystem_dyna<wbr class="">mic_test_helper.py</a> -Werror=thread-safety -std=c++1z -fdeprecated-macro -fdebug-compilation-dir /w/src/<a href="http://llvm.org/" rel="noreferrer" target="_blank" class="">llvm.org</a> -ferror-limit 19 -fmessage-length 210 -fobjc-runtime=gnustep -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /w/bld/org/projects/libcxx/tes<wbr class="">t/std/utilities/utility/pairs/<wbr class="">pairs.pair/Output/trivial_copy<wbr class="">_move.pass.cpp.o -x c++ /w/src/<a href="http://llvm.org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/utilities/utility/p<wbr class="">airs/pairs.pair/trivial_copy_m<wbr class="">ove.pass.cpp</a><br class="">
clang -cc1 version 3.8.0 based upon LLVM 3.8.0 default target x86_64-unknown-freebsd11.0<span class=""><br class="">
#include "..." search starts here:<br class="">
#include <...> search starts here:<br class="">
 /w/src/<a href="http://llvm.org/projects/libcxx/include" rel="noreferrer" target="_blank" class="">llvm.org/projects/libc<wbr class="">xx/include</a><br class="">
 /w/src/<a href="http://llvm.org/projects/libcxx/test/support" rel="noreferrer" target="_blank" class="">llvm.org/projects/libc<wbr class="">xx/test/support</a><br class=""></span>
 /usr/bin/../lib/clang/3.8.0/i<wbr class="">nclude<span class=""><br class="">
 /usr/include<br class="">
End of search list.<br class=""></span>
/w/src/<a href="http://llvm.org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp:35:9" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/utilities/utility/p<wbr class="">airs/pairs.pair/trivial_copy_m<wbr class="">ove.pass.cpp:35:9</a>: error: static_assert failed ""<br class="">
        static_assert(std::is_triviall<wbr class="">y_copy_constructible<P>::value<wbr class="">, "");<br class="">
        ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~~~~<br class="">
/w/src/<a href="http://llvm.org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp:40:9" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/utilities/utility/p<wbr class="">airs/pairs.pair/trivial_copy_m<wbr class="">ove.pass.cpp:40:9</a>: error: static_assert failed ""<br class="">
        static_assert(std::is_triviall<wbr class="">y_move_constructible<P>::value<wbr class="">, "");<br class="">
        ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~~~~<br class="">
/w/src/<a href="http://llvm.org/projects/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp:47:9" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/utilities/utility/p<wbr class="">airs/pairs.pair/trivial_copy_m<wbr class="">ove.pass.cpp:47:9</a>: error: static_assert failed ""<br class="">
        static_assert(std::is_triviall<wbr class="">y_move_constructible<P1>::valu<wbr class="">e, "");<br class="">
        ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~~~~~<br class="">
3 errors generated.<br class="">
<br class="">
<br class="">
<br class="">
-Krzysztof<span class=""><br class="">
<br class="">
<br class="">
<br class="">
<br class="">
On 10/7/2016 9:31 PM, Eric Fiselier wrote:<br class="">
</span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
In my infinite cleverness I think I found a solution which gives both<br class="">
constexpr and non-trivial constructors.<br class="">
<br class="">
Please take a look at <a href="https://reviews.llvm.org/D25389" rel="noreferrer" target="_blank" class="">https://reviews.llvm.org/D2538<wbr class="">9</a>.<br class="">
<br class="">
/Eric<br class="">
<br class="">
On Fri, Oct 7, 2016 at 8:11 PM, Eric Fiselier <<a href="mailto:eric@efcs.ca" target="_blank" class="">eric@efcs.ca</a><br class=""></span><span class="">
<mailto:<a href="mailto:eric@efcs.ca" target="_blank" class="">eric@efcs.ca</a>>> wrote:<br class="">
<br class="">
    On second thought applying (A) might be ill-advised. Most of the<br class="">
    pair tests still fail after applying it in constructs like<br class="">
    "std::is_copy_constructible_v<<wbr class="">std::pair<NonCopyable, int&&>>",<br class="">
    except now instead of returning the wrong answer the traits cause<br class="">
    hard compile errors and template barf.<br class="">
<br class="">
    @Ed, David, and Dimitry The FreeBSD std::pair implementation is<br class="">
    fundamentally broken, and there's not much I think I can do about<br class="">
    it. Is there a timeline for making the ABI change in FreeBSD?<br class="">
<br class="">
    /Eric<br class="">
<br class="">
    On Fri, Oct 7, 2016 at 7:59 PM, Eric Fiselier <<a href="mailto:eric@efcs.ca" target="_blank" class="">eric@efcs.ca</a><br class=""></span><span class="">
    <mailto:<a href="mailto:eric@efcs.ca" target="_blank" class="">eric@efcs.ca</a>>> wrote:<br class="">
<br class="">
        > Does anyone know what the problem may be?<br class="">
<br class="">
        FreeBSD ships std::pair with explicitly defined copy and move<br class="">
        constructors as opposed to explicitly defaulted ones. Mistakenly<br class="">
        these constructors have not been marked constexpr in C++14.<br class="">
        FreeBSD provides these old constructors is because switching to<br class="">
        defaulted copy/move constructors is an ABI break because it<br class="">
        makes std::pair non-trivial and changes how it's passed to<br class="">
        functions according to the Itanium ABI.<br class="">
<br class="">
        Fixing this requires either (A) marking the fallback<br class="">
        constructors constexpr in C++14, or (B) convincing FreeBSD to<br class="">
        take the ABI break.<br class="">
<br class="">
        The easiest and simplistic fix is (A). However my concern with<br class="">
        (A) is that the fallback constructors don't SFINAE away if they<br class="">
        are ill-formed. This means that applying constexpr to them could<br class="">
        break existing code by causing the eager instantiation of the<br class="">
        ill-formed constructors, instantiations that would not occur if<br class="">
        the constructors were non-constexpr. For this reason I think fix<br class="">
        (B) is more correct, and greatly preferable.<br class="">
<br class="">
        Since we have plenty of time until the next release I'll go<br class="">
        ahead and commit (A) for now, keeping my ear to the ground for<br class="">
        breakage.<br class="">
<br class="">
        /Eric<br class="">
<br class="">
<br class="">
        On Fri, Oct 7, 2016 at 7:23 PM, Krzysztof Parzyszek via cfe-dev<br class=""></span><span class="">
        <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank" class="">cfe-dev@lists.llvm.org</a> <mailto:<a href="mailto:cfe-dev@lists.llvm.org" target="_blank" class="">cfe-dev@lists.llvm.org</a><wbr class="">>> wrote:<br class="">
<br class="">
            I'm running this on FreeBSD 11 (stable). It has clang-3.8.0<br class="">
            as the system compiler. LLVM/Clang/et al. compiled without<br class="">
            problems, but I'm seeing failures in check-libcxx.  Example<br class="">
            below.<br class="">
<br class="">
            Does anyone know what the problem may be?<br class="">
<br class="">
<br class="">
            clang version 4.0.0 (<a href="http://llvm.org/git/clang.git" rel="noreferrer" target="_blank" class="">http://llvm.org/git/clang.git</a><br class="">
            a85c03256cfc0812e268f5e0f1b804<wbr class="">910e75e673)<br class="">
            (<a href="http://llvm.org/git/llvm.git" rel="noreferrer" target="_blank" class="">http://llvm.org/git/llvm.git</a><br class="">
            c95d4ff692323bde64fc8ef45e174b<wbr class="">19450779af)<br class="">
            Target: x86_64-unknown-freebsd11.0<br class="">
            Thread model: posix<br class="">
            InstalledDir: /w/c/org/bin<br class="">
             "/w/c/org/bin/clang-4.0" -cc1 -triple<br class="">
            x86_64-unknown-freebsd11.0 -emit-obj -mrelax-all<br class="">
            -disable-free -main-file-name minmax_init_list_comp.pass.cpp<br class="">
            -mrelocation-model static -mthread-model posix<br class="">
            -mdisable-fp-elim -masm-verbose -mconstructor-aliases<br class="">
            -munwind-tables -target-cpu x86-64 -v -v -dwarf-column-info<br class="">
            -debugger-tuning=gdb -coverage-notes-file<br class="">
            /w/bld/org/projects/libcxx/tes<wbr class="">t/std/algorithms/alg.sorting/a<wbr class="">lg.min.max/Output/minmax_init_<wbr class="">list_comp.pass.cpp.gcno<br class="">
            -nostdinc++ -resource-dir /w/c/org/bin/../lib/clang/4.0.<wbr class="">0<br class="">
            -include<br class=""></span>
            /w/src/<a href="http://llvm.org/projects/libcxx/test/support/nasty_macros.hpp" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/support/nasty_macros.hp<wbr class="">p</a> <<a href="http://llvm.org/projects/libcxx/test/support/nasty_macros.hpp" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/support/nasty_macros.h<wbr class="">pp</a>><br class="">
            -I /w/src/<a href="http://llvm.org/projects/libcxx/include" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include</a><br class="">
            <<a href="http://llvm.org/projects/libcxx/include" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include</a>> -I<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/support" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/support</a><br class="">
            <<a href="http://llvm.org/projects/libcxx/test/support" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/support</a>> -D<br class="">
            LIBCXX_FILESYSTEM_STATIC_TEST_<wbr class="">ROOT=/w/src/<a href="http://llvm.org/projects/libcxx/test/std/experimental/filesystem/Inputs/static_test_env" rel="noreferrer" target="_blank" class="">llvm.org/projects/<wbr class="">libcxx/test/std/experimental/f<wbr class="">ilesystem/Inputs/static_test_e<wbr class="">nv</a><br class="">
            <<a href="http://llvm.org/projects/libcxx/test/std/experimental/filesystem/Inputs/static_test_env" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/experimental/files<wbr class="">ystem/Inputs/static_test_env</a>><span class=""><br class="">
            -D<br class="">
            LIBCXX_FILESYSTEM_DYNAMIC_TEST<wbr class="">_ROOT=/w/bld/org/projects/libc<wbr class="">xx/test/filesystem/Output/dyna<wbr class="">mic_env<br class="">
            -D<br class="">
            LIBCXX_FILESYSTEM_DYNAMIC_TEST<wbr class="">_HELPER=/usr/local/bin/python2<wbr class="">.7<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/support/filesystem_dynamic_test_helper.py" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/support/filesystem_dyna<wbr class="">mic_test_helper.py</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/support/filesystem_dynamic_test_helper.py" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/support/filesystem_dyn<wbr class="">amic_test_helper.py</a>><br class="">
            -Werror=thread-safety -std=c++1z -fdeprecated-macro<br class="">
            -fdebug-compilation-dir /w/src/<a href="http://llvm.org/" rel="noreferrer" target="_blank" class="">llvm.org</a> <<a href="http://llvm.org/" rel="noreferrer" target="_blank" class="">http://llvm.org</a>><span class=""><br class="">
            -ferror-limit 19 -fmessage-length 210 -fobjc-runtime=gnustep<br class="">
            -fcxx-exceptions -fexceptions -fdiagnostics-show-option<br class="">
            -fcolor-diagnostics -o<br class="">
            /w/bld/org/projects/libcxx/tes<wbr class="">t/std/algorithms/alg.sorting/a<wbr class="">lg.min.max/Output/minmax_init_<wbr class="">list_comp.pass.cpp.o<br class="">
            -x c++<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp</a>><span class=""><br class="">
            clang -cc1 version 4.0.0 based upon LLVM 4.0.0svn default<br class="">
            target x86_64-unknown-freebsd11.0<br class="">
            #include "..." search starts here:<br class="">
            #include <...> search starts here:<br class="">
             /w/src/<a href="http://llvm.org/projects/libcxx/include" rel="noreferrer" target="_blank" class="">llvm.org/projects/libc<wbr class="">xx/include</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include</a>><br class="">
             /w/src/<a href="http://llvm.org/projects/libcxx/test/support" rel="noreferrer" target="_blank" class="">llvm.org/projects/libc<wbr class="">xx/test/support</a><br class="">
            <<a href="http://llvm.org/projects/libcxx/test/support" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/support</a>><span class=""><br class="">
             /w/c/org/bin/../lib/clang/4.0<wbr class="">.0/include<br class="">
             /usr/include<br class="">
            End of search list.<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:68:19" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:68:19</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:68:19" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:68:19</a>>:<span class=""><br class="">
            error: static_assert expression is not an integral constant<br class="">
            expression<br class="">
                static_assert((std::minmax({1, 2, 3},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
<br class="">
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/algorithm:2823:12</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/algorithm:2823:12</a>>:<span class=""><br class="">
            note: non-constexpr constructor 'pair' cannot be used in a<br class="">
            constant expression<br class="">
                return __result;<br class="">
                       ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:68:20" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:68:20</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:68:20" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:68:20</a>>:<span class=""><br class="">
            note: in call to 'minmax({&{1, 2, 3}[0], 3}, {{}})'<br class="">
                static_assert((std::minmax({1, 2, 3},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
                               ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/utility:316:5</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/utility:316:5</a>>:<span class=""><br class="">
            note: declared here<br class="">
                pair(pair&& __p)<br class="">
            _NOEXCEPT_(is_nothrow_move_con<wbr class="">structible<first_type>::value &&<br class="">
                ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:69:19" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:69:19</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:69:19" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:69:19</a>>:<span class=""><br class="">
            error: static_assert expression is not an integral constant<br class="">
            expression<br class="">
                static_assert((std::minmax({1, 3, 2},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
<br class="">
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/algorithm:2823:12</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/algorithm:2823:12</a>>:<span class=""><br class="">
            note: non-constexpr constructor 'pair' cannot be used in a<br class="">
            constant expression<br class="">
                return __result;<br class="">
                       ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:69:20" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:69:20</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:69:20" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:69:20</a>>:<span class=""><br class="">
            note: in call to 'minmax({&{1, 3, 2}[0], 3}, {{}})'<br class="">
                static_assert((std::minmax({1, 3, 2},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
                               ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/utility:316:5</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/utility:316:5</a>>:<span class=""><br class="">
            note: declared here<br class="">
                pair(pair&& __p)<br class="">
            _NOEXCEPT_(is_nothrow_move_con<wbr class="">structible<first_type>::value &&<br class="">
                ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:70:19" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:70:19</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:70:19" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:70:19</a>>:<span class=""><br class="">
            error: static_assert expression is not an integral constant<br class="">
            expression<br class="">
                static_assert((std::minmax({2, 1, 3},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
<br class="">
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/algorithm:2823:12</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/algorithm:2823:12</a>>:<span class=""><br class="">
            note: non-constexpr constructor 'pair' cannot be used in a<br class="">
            constant expression<br class="">
                return __result;<br class="">
                       ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:70:20" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:70:20</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:70:20" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:70:20</a>>:<span class=""><br class="">
            note: in call to 'minmax({&{2, 1, 3}[0], 3}, {{}})'<br class="">
                static_assert((std::minmax({2, 1, 3},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
                               ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/utility:316:5</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/utility:316:5</a>>:<span class=""><br class="">
            note: declared here<br class="">
                pair(pair&& __p)<br class="">
            _NOEXCEPT_(is_nothrow_move_con<wbr class="">structible<first_type>::value &&<br class="">
                ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:71:19" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:71:19</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:71:19" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:71:19</a>>:<span class=""><br class="">
            error: static_assert expression is not an integral constant<br class="">
            expression<br class="">
                static_assert((std::minmax({2, 3, 1},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
<br class="">
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/algorithm:2823:12</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/algorithm:2823:12</a>>:<span class=""><br class="">
            note: non-constexpr constructor 'pair' cannot be used in a<br class="">
            constant expression<br class="">
                return __result;<br class="">
                       ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:71:20" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:71:20</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:71:20" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:71:20</a>>:<span class=""><br class="">
            note: in call to 'minmax({&{2, 3, 1}[0], 3}, {{}})'<br class="">
                static_assert((std::minmax({2, 3, 1},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
                               ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/utility:316:5</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/utility:316:5</a>>:<span class=""><br class="">
            note: declared here<br class="">
                pair(pair&& __p)<br class="">
            _NOEXCEPT_(is_nothrow_move_con<wbr class="">structible<first_type>::value &&<br class="">
                ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:72:19" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:72:19</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:72:19" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:72:19</a>>:<span class=""><br class="">
            error: static_assert expression is not an integral constant<br class="">
            expression<br class="">
                static_assert((std::minmax({3, 1, 2},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
<br class="">
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/algorithm:2823:12</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/algorithm:2823:12</a>>:<span class=""><br class="">
            note: non-constexpr constructor 'pair' cannot be used in a<br class="">
            constant expression<br class="">
                return __result;<br class="">
                       ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:72:20" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:72:20</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:72:20" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:72:20</a>>:<span class=""><br class="">
            note: in call to 'minmax({&{3, 1, 2}[0], 3}, {{}})'<br class="">
                static_assert((std::minmax({3, 1, 2},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
                               ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/utility:316:5</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/utility:316:5</a>>:<span class=""><br class="">
            note: declared here<br class="">
                pair(pair&& __p)<br class="">
            _NOEXCEPT_(is_nothrow_move_con<wbr class="">structible<first_type>::value &&<br class="">
                ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:73:19" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:73:19</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:73:19" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:73:19</a>>:<span class=""><br class="">
            error: static_assert expression is not an integral constant<br class="">
            expression<br class="">
                static_assert((std::minmax({3, 2, 1},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
<br class="">
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr class="">~~~~~~~~~~~~~~<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/algorithm:2823:12</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/algorithm:2823:12" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/algorithm:2823:12</a>>:<span class=""><br class="">
            note: non-constexpr constructor 'pair' cannot be used in a<br class="">
            constant expression<br class="">
                return __result;<br class="">
                       ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:73:20" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/test/std/algorithms/alg.sort<wbr class="">ing/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:73:20</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp:73:20" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/test/std/algorithms/alg.sor<wbr class="">ting/alg.min.max/minmax_init_<wbr class="">list_comp.pass.cpp:73:20</a>>:<span class=""><br class="">
            note: in call to 'minmax({&{3, 2, 1}[0], 3}, {{}})'<br class="">
                static_assert((std::minmax({3, 2, 1},<br class="">
            std::greater<int>()) == std::pair<int, int>(3, 1)), "");<br class="">
                               ^<br class="">
            /w/src/<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">llvm.org/projects/libcx<wbr class="">x/include/utility:316:5</a><br class=""></span>
            <<a href="http://llvm.org/projects/libcxx/include/utility:316:5" rel="noreferrer" target="_blank" class="">http://llvm.org/projects/libc<wbr class="">xx/include/utility:316:5</a>>:<span class=""><br class="">
            note: declared here<br class="">
                pair(pair&& __p)<br class="">
            _NOEXCEPT_(is_nothrow_move_con<wbr class="">structible<first_type>::value &&<br class="">
                ^<br class="">
            6 errors generated.<br class="">
<br class="">
<br class="">
            -Krzysztof<br class="">
<br class="">
            ______________________________<wbr class="">_________________<br class="">
            cfe-dev mailing list<br class=""></span>
            <a href="mailto:cfe-dev@lists.llvm.org" target="_blank" class="">cfe-dev@lists.llvm.org</a> <mailto:<a href="mailto:cfe-dev@lists.llvm.org" target="_blank" class="">cfe-dev@lists.llvm.org</a><wbr class="">><br class="">
            <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/cfe-dev</a><br class="">
            <<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin<wbr class="">/mailman/listinfo/cfe-dev</a>><br class="">
<br class="">
<br class="">
<br class="">
<br class="">
</blockquote>
<br class="">
</blockquote></div><br class=""></div></div>
</div></blockquote></div><br class=""></body></html>