Skip to content

Standard Library Modules: uniform_real_distribution emits error C2512: 'std::_Unsigned128': no appropriate default constructor available #4899

Description

@larioteo

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 ==========

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingcompilerCompiler work involvedfixedSomething works now, yay!modulesC++23 modules, C++20 header units

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions