Standard Library Modules: uniform_real_distribution emits error C2512: 'std::_Unsigned128': no appropriate default constructor available · Issue #4899 · microsoft/STL (original) (raw)

Describe the bug

It seems there was a bug introduced with the latest preview version, std::uniform_real_distribution doesn't work as expected under C++ Latest with experimental modules enabled.

Simple Example

import std;

int main() {
    std::mt19937 engine{ std::random_device{}() };
    std::uniform_real_distribution<double> dist(0.0, 1.0);
    double result = dist(engine);
    return 0;
}

Expected behavior

The code should compile and run without errors as it did in previous versions

STL version

Microsoft Visual Studio Community 2022 (64-bit) - Preview
Version 17.12.0 Preview 1.0

Additional context

Worked on 17.11.0 Preview 6.0

Compiler Log

Build started at 20:40...
1>------ Build started: Project: Random, Configuration: Debug x64 ------
1>Scanning sources for module dependencies...
1>std.ixx
1>std.compat.ixx
1>Compiling...
1>std.ixx
1>std.compat.ixx
1>Random.cpp
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22): error C2512: 'std::_Unsigned128': no appropriate default constructor available
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(273,48):
1>    while evaluating constexpr function 'std::operator +'
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(311,34):
1>    while evaluating constexpr function 'std::_Generate_canonical_params'
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22):
1>    the template instantiation context (the oldest one first) is
1>        D:\Research\RandomBug\Random\Random.cpp(6,21):
1>        see reference to function template instantiation 'double std::uniform_real_distribution<double>::operator ()<std::mt19937>(_Engine &)' being compiled
1>        with
1>        [
1>            _Engine=std::mt19937
1>        ]
1>            D:\Research\RandomBug\Random\Random.cpp(6,19):
1>            see the first reference to 'std::uniform_real_distribution<double>::operator ()' in 'main'
1>        C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(3287,25):
1>        see reference to function template instantiation 'double std::uniform_real<_Ty>::operator ()<_Engine>(_Engine &)' being compiled
1>        with
1>        [
1>            _Ty=double,
1>            _Engine=std::mt19937
1>        ]
1>        C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(3182,16):
1>        see reference to function template instantiation 'double std::uniform_real<_Ty>::_Eval<_Engine>(_Engine &,const std::uniform_real<_Ty>::param_type &) const' being compiled
1>        with
1>        [
1>            _Ty=double,
1>            _Engine=std::mt19937
1>        ]
1>        C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(3222,16):
1>        see reference to function template instantiation '_Real std::_Nrand_impl<_Ty,_Engine>(_Gen &)' being compiled
1>        with
1>        [
1>            _Real=double,
1>            _Ty=double,
1>            _Engine=std::mt19937,
1>            _Gen=std::mt19937
1>        ]
1>        C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(419,21):
1>        see reference to function template instantiation '_Real std::generate_canonical<_Real,53,_Gen>(_Gen &)' being compiled
1>        with
1>        [
1>            _Real=double,
1>            _Gen=std::mt19937
1>        ]
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(311,32): error C2131: expression did not evaluate to a constant
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22):
1>    a non-constant (sub-)expression was encountered
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(314,46): error C2975: '_Test': invalid template argument for 'std::conditional_t', expected compile-time constant expression
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\xtr1common(68,28):
1>    see declaration of '_Test'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(313,59): error C2975: '_Test': invalid template argument for 'std::conditional_t', expected compile-time constant expression
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\xtr1common(68,28):
1>    see declaration of '_Test'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(315,18): error C2512: 'std::_Unsigned128': no appropriate default constructor available
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(706,8):
1>    see declaration of 'std::_Unsigned128'
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(317,30): error C2131: expression did not evaluate to a constant
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22):
1>    a non-constant (sub-)expression was encountered
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(319,39): error C2131: expression did not evaluate to a constant
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22):
1>    a non-constant (sub-)expression was encountered
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(321,46): error C2131: expression did not evaluate to a constant
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22):
1>    a non-constant (sub-)expression was encountered
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(322,40): error C2131: expression did not evaluate to a constant
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22):
1>    a non-constant (sub-)expression was encountered
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(336,39): error C2131: expression did not evaluate to a constant
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22):
1>    a non-constant (sub-)expression was encountered
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(337,39): error C2131: expression did not evaluate to a constant
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22):
1>    a non-constant (sub-)expression was encountered
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(342,43): error C2131: expression did not evaluate to a constant
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22):
1>    a non-constant (sub-)expression was encountered
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\random(344,50): error C2131: expression did not evaluate to a constant
1>(compiling source file 'Random.cpp')
1>    C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.42.34226\include\__msvc_int128.hpp(826,22):
1>    a non-constant (sub-)expression was encountered
1>Done building project "Random.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build completed at 20:40 and took 03,809 seconds ==========