Sekory
Sekory

Reputation: 143

std thread sleep_for doesnt work with some chrono::duration

I am using VS2012 and I have problem with following example:

#include <chrono>
#include <thread>

int main()
{
    // doesn't compile and I don't understand why:
    std::this_thread::sleep_for(std::chrono::duration<double>(0.1));

    // I can use this but still I would like to know the reason:
    std::this_thread::sleep_for(std::chrono::duration<long long, std::milli>(100));

    return 0;
}

Both duration should be valid. And it is possible to use them in different context.

Compile error:

1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\chrono(749): error C2679: binary '+=' : no operator found which takes a right-hand operand of type 'const std::chrono::duration<_Rep>' (or there is no acceptable conversion)
1>          with
1>          [
1>              _Rep=double
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\chrono(166): could be 'std::chrono::duration<_Rep,_Period> &std::chrono::duration<_Rep,_Period>::operator +=(const std::chrono::duration<_Rep,_Period> &)'
1>          with
1>          [
1>              _Rep=__int64,
1>              _Period=std::nano
1>          ]
1>          while trying to match the argument list '(std::chrono::nanoseconds, const std::chrono::duration<_Rep>)'
1>          with
1>          [
1>              _Rep=double
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\thread(164) : see reference to function template instantiation 'xtime std::_To_xtime<double,std::ratio<_Nx>>(const std::chrono::duration<_Rep> &)' being compiled
1>          with
1>          [
1>              _Nx=0x01,
1>              _Rep=double
1>          ]
1>          i:\prog\.c++\test2\test2\source.cpp(13) : see reference to function template instantiation 'void std::this_thread::sleep_for<double,std::ratio<_Nx>>(const std::chrono::duration<_Rep> &)' being compiled
1>          with
1>          [
1>              _Nx=0x01,
1>              _Rep=double
1>          ]
1>
1>Build FAILED.

Any help appreciated.

Upvotes: 1

Views: 1668

Answers (1)

Sekory
Sekory

Reputation: 143

It is VS2012 compiler issue. Not 100% sure if it is this one (thx Praetorian). But it is possible to compile without problem with gcc 4.9.2. I should've think about trying it before I ask.

Upvotes: 2

Related Questions