• g++ v14.1.0

    From Student Project@21:1/5 to All on Tue Dec 17 04:39:58 2024
    Do you guys see any problems in this simple code:

    struct Timer
    {
    std::chrono::time_point<std::chrono::steady_clock> start, end;
    std::chrono::duration<float> duration;

    Timer()
    {
    start = std::chrono::high_resolution_clock::now();
    }

    ~Timer()
    {
    end = std::chrono::high_resolution_clock::now();
    duration = end - start;

    float ms = duration.count() * 1000.0f;
    std::cout << "Timer took: " << ms << "ms\n";
    }
    };

    This code compiles with clang++ and even Visual Studio (Visual Studio
    2022 Developer Command Prompt v17.12.3) but g++ gives many errors such
    as this:

    g++ -o Program2.exe -Wall main.cpp
    main.cpp: In constructor 'Timer::Timer()':
    main.cpp:16:65: error: no match for 'operator=' (operand types are 'std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >' and 'std::chrono::_V2::system_clock::time_point' {aka 'std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >'})
    16 | start = std::chrono::high_resolution_clock::now();
    | ^
    In file included from C:/msys64/ucrt64/include/c++/14.1.0/chrono:41,
    from main.cpp:2: C:/msys64/ucrt64/include/c++/14.1.0/bits/chrono.h:922:13: note:
    candidate: 'constexpr
    std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >& std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> >
    ::operator=(const
    std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >&)'
    922 | class time_point
    | ^~~~~~~~~~ C:/msys64/ucrt64/include/c++/14.1.0/bits/chrono.h:922:13: note: no
    known conversion for argument 1 from 'std::chrono::_V2::system_clock::time_point' {aka 'std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >'} to
    'const std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >&' C:/msys64/ucrt64/include/c++/14.1.0/bits/chrono.h:922:13: note:
    candidate: 'constexpr
    std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >& std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> >
    ::operator=(std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >&&)' C:/msys64/ucrt64/include/c++/14.1.0/bits/chrono.h:922:13: note: no
    known conversion for argument 1 from 'std::chrono::_V2::system_clock::time_point' {aka 'std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >'} to 'std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >&&'
    main.cpp: In destructor 'Timer::~Timer()':
    main.cpp:21:63: error: no match for 'operator=' (operand types are 'std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >' and 'std::chrono::_V2::system_clock::time_point' {aka 'std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >'})
    21 | end = std::chrono::high_resolution_clock::now();
    | ^ C:/msys64/ucrt64/include/c++/14.1.0/bits/chrono.h:922:13: note:
    candidate: 'constexpr
    std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >& std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> >
    ::operator=(const
    std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >&)'
    922 | class time_point
    | ^~~~~~~~~~ C:/msys64/ucrt64/include/c++/14.1.0/bits/chrono.h:922:13: note: no
    known conversion for argument 1 from 'std::chrono::_V2::system_clock::time_point' {aka 'std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >'} to
    'const std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >&' C:/msys64/ucrt64/include/c++/14.1.0/bits/chrono.h:922:13: note:
    candidate: 'constexpr
    std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >& std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> >
    ::operator=(std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >&&)' C:/msys64/ucrt64/include/c++/14.1.0/bits/chrono.h:922:13: note: no
    known conversion for argument 1 from 'std::chrono::_V2::system_clock::time_point' {aka 'std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >'} to 'std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1, 1000000000> > >&&'

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Student Project@21:1/5 to Bonita Montero on Tue Dec 17 15:49:49 2024
    On 17/12/2024 06:52, Bonita Montero wrote:
    Am 17.12.2024 um 05:39 schrieb Student Project:

    Do you guys see any problems in this simple code:
    struct Timer
    {
        std::chrono::time_point<std::chrono::steady_clock> start, end;
        std::chrono::duration<float> duration;

        Timer()
        {
            start = std::chrono::high_resolution_clock::now();
        std::chrono::time_point<std::chrono::high_resolution_clock> start, end;


        }

        ~Timer()
        {
            end = std::chrono::high_resolution_clock::now();
            duration = end - start;

            float ms = duration.count() * 1000.0f;
            std::cout << "Timer took: " << ms << "ms\n";
        }
    };


    That's while steady_clock and system_clock are the same with MSVC
    (both rely on GetSystemTimeAsFileTime()).

    Vielen Dank, Bonita. Es lässt sich jetzt in allen drei Compilern
    kompilieren, auf die ich Zugriff habe. Das vollständige, einfache
    Programm zum Ausprobieren finden Sie hier:

    #include <iostream>
    #include <chrono>
    #include <thread>

    /*
    * Compile directives:
    For g++:
    g++ -std=c++20 -Wall -o obj/main.o -c src/main.cpp
    g++ -std=c++20 -Wall -o Program obj/main.o

    For clang++:
    clang++ -o Program01.exe -Wall main.cpp

    For Visual Studio:
    cl /EHsc main.cpp

    */

    struct Timer
    {

    std::chrono::time_point<std::chrono::high_resolution_clock> start, end;
    std::chrono::duration<float> duration;

    Timer()
    {
    start = std::chrono::high_resolution_clock::now();
    }

    ~Timer()
    {
    end = std::chrono::high_resolution_clock::now();
    duration = end - start;

    float ms = duration.count() * 1000.0f;
    std::cout << "Timer took: " << ms << "ms\n";
    }
    };

    void Function()
    {

    Timer timer;
    for (int i = 0; i < 1000; i++)
    {
    std::cout << "Hello World!\n";
    }
    }

    int main()
    {
    Function();
    }


    Frohe Weihnachten.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)