Search code examples
c++c++11c++14user-defined-literals

user-defined literals overloading in <chrono>


chrono takes user-defined literals to make it more convenient. For each literal, it has two overloading functions.

constexpr chrono::hours operator "" h(unsigned long long);
constexpr chrono::duration<unspecified , ratio<3600,1>> operator "" h(long double);

I'm confused by the second overloading function, i.e. the function with long double as parameter.

Why we need the second overloading? And what is unspecified?


Solution

  • Both represent std::chrono::duration in hours. The first one forms an integer literal, the second one forms a floating-point literal. First one can represent tick count only, the second one can represent fractions of ticks.