Visual Studio 2019 c++latest 通用 URNG 函数在最新更新后无法编译

问题描述

我有以下通用 C++ 通用 URNG 函数

Doctor summary (to see all details,run Flutter doctor -v):
[√] Flutter (Channel dev,2.1.0-10.0.pre,on Microsoft Windows [Version 10.0.18363.1379],locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[X] Chrome - develop for the web (Cannot find Chrome executable at .\Google\Chrome\Application\chrome.exe)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.8.3)
[√] Android Studio (version 4.1.0)
[√] VS Code (version 1.54.1)
[√] Connected device (2 available)

并且我从以下测试函数调用函数

template<class URNG> 
void TestURNG(URNG& urng)
{
    // Uniform distribution used with vector
    // distribution is [-5,5] inclusive
    uniform_int_distribution<long> dist(-5,5);
    vector<long> v;
    v.resize(20);
    generate(v.begin(),v.end(),[&] { return dist(urng); });
    cout << "Randomized vector: ";
    copy(v.begin(),ostream_iterator<long>(cout," "));
    cout << endl;

    // Shuffle an array.
    // Notice that shuffle() takes an URNG,not a distribution
    vector<string> strings = { { "H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Sc","Ti","V","Cr","Mn","Fe" } };
    shuffle(strings.begin(),strings.end(),urng);
    cout << "Randomized vector<string>: ";
    copy(strings.begin(),ostream_iterator<string>(cout," "));
    cout << endl;
}

在 Visual Studio 2019 中使用 void TestRandom() { // First run: non-seedable,non-deterministic URNG random_device // Slower but crypto-secure and non-repeatable. random_device device; cout << "Using random_device URNG:" << endl; TestURNG(device); // Second run: simple integer seed. Repeatable results cout << "Using constant-seed mersene twister engine URNG:" << endl; mt19937_64 constant_seed_mersene_twister_engine(mt19937_64(12345)); TestURNG(constant_seed_mersene_twister_engine); // Third run: random_device as seed; different each run. // Desirable for most purposes cout << "Using non-deterministic-seed mersene twister engine URNG:" << endl; mt19937_64 non_deterministic_seed_mersene_twister_engine(mt19937_64(device())); TestURNG(non_deterministic_seed_mersene_twister_engine); // Fourth run: "warm-up" sequence as as seed; different each run. // Advanced uses. Allows more than 32 bits of randomness. cout << "Using non-deterministic-seed \"warm-up\" sequence mersene twister engine URNG" << endl; vector<unsigned int> seeds; cout << "mt19937_64::state_size: " << mt19937_64::state_size << endl; seeds.resize(mt19937_64::state_size); generate_n(seeds.begin(),mt19937_64::state_size,ref(device)); seed_seq sequence(begin(seeds),end(seeds)); mt19937_64 non_deterministic_seed_sequence_mersene_twister_engine(mt19937_64(sequence)); TestURNG(non_deterministic_seed_sequence_mersene_twister_engine); } 会导致以下编译错误

c++latest

它曾经可以工作,但最近的 VS2019 更新导致它失败。我想念什么?

解决方法

最令人头疼的解析问题。

你必须写:

mt19937_64 non_deterministic_seed_sequence_mersene_twister_engine{mt19937_64(sequence)};

现在,您定义了一个函数声明。