В C ++ 20 вы сможете сделать это:
#include <chrono>
constexpr
bool
is_weekend(std::chrono::sys_days t)
{
using namespace std::chrono;
const weekday wd{t};
return wd == Saturday || wd == Sunday;
}
int
main()
{
using namespace std::chrono;
static_assert(!is_weekend(year{2018}/10/12), "");
static_assert( is_weekend(year{2018}/10/13), "");
}
Естественно, если ввод не constexpr
, тогда вычисление также не может быть.
Никто из тех, о ком я знаю, еще не отправляет это, однако вы можете получить преимущество с этим синтаксисом, используя datetime lib Говарда Хиннанта .Вам просто нужно #include "date/date.h"
и изменить несколько using namespace std::chrono;
на using namespace date;
.
#include "date/date.h"
constexpr
bool
is_weekend(date::sys_days t)
{
using namespace date;
const weekday wd{t};
return wd == Saturday || wd == Sunday;
}
int
main()
{
using namespace date;
static_assert(!is_weekend(year{2018}/10/12), "");
static_assert( is_weekend(year{2018}/10/13), "");
}
Это будет работать с C ++ 17, C ++ 14, и если вы удалите constexpr
, C ++ 11.Он не будет перенесен на более раннюю версию, чем C ++ 11, поскольку зависит от <chrono>
.
Для бонусных баллов вышеуказанная функция также будет работать с текущим временем (UTC):
assert(!is_weekend(floor<days>(std::chrono::system_clock::now())));