: P0608R3 Improving variant's converting constructor/assignment by MichaelRizkalla · Pull Request #1629 · microsoft/STL (original) (raw)

I rerun the EDG tests after commit "Make sure base class members are visible" (2d4c87b) without #ifndef __EDG__ and I got the errors:

C:\Dev\STL\playground>cl /c /BE /std:c++latest main.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29828 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

/std:c++latest is provided as a preview of language features from the latest C++
working draft, and we're eager to hear about bugs and suggestions for improvements.
However, note that these features are provided as-is without support, and subject
to changes or removal as the working draft evolves. See
https://go.microsoft.com/fwlink/?linkid=2045807 for details.

main.cpp
"main.cpp", line 39: error: static assertion failed
  static_assert(is_constructible_v<variant<float, long int>, int>);
  ^

"main.cpp", line 40: error: static assertion failed
  static_assert(is_constructible_v<variant<float, long long int>, int>);
  ^

"main.cpp", line 41: error: static assertion failed
  static_assert(is_constructible_v<variant<float, long, double>, int>);
  ^

"main.cpp", line 42: error: static assertion failed
  static_assert(is_constructible_v<variant<float, vector<int>, long long int>, int>);
  ^

"main.cpp", line 45: error: static assertion failed
  static_assert(!is_constructible_v<variant<float>, int>);
  ^

"main.cpp", line 46: error: static assertion failed
  static_assert(!is_constructible_v<variant<float, vector<int>>, int>);
  ^

"main.cpp", line 67: error: static assertion failed
  static_assert(!is_constructible_v<variant<double_double>, int>);
  ^

"main.cpp", line 69: error: static assertion failed
  static_assert(!is_constructible_v<variant<float>, unsigned int>);
  ^

"main.cpp", line 96: error: no operator "=" matches these operands
            operand types are: T2 = int
      e = 0; // long
        ^

"main.cpp", line 102: error: no suitable constructor exists to convert from
          "int" to "std::variant<float, long>"
      variant<float, long> g = 0; // long
                               ^

"main.cpp", line 105: error: no suitable constructor exists to convert from
          "int" to "std::variant<float, long, double>"
      variant<float, long, double> h = 0; // long
                                       ^

"main.cpp", line 108: error: no suitable constructor exists to convert from
          "int" to "std::variant<float, std::vector<int, std::allocator<int>>,
          long long>"
      variant<float, vector<int>, long long int> i = 0; // long long int

So #ifndef __EDG__ are still needed. EDG is complaining about something else or is it a compiler bug...