1c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===//
2c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
3c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//                     The LLVM Compiler Infrastructure
4c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
8c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===//
9c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
10c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// <chrono>
11c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
12c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// duration
13c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
143df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow// constexpr duration operator--(int);   // constexpr in C++17
15c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
16c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <chrono>
17c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <cassert>
18c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
193df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow#include "test_macros.h"
203df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow
213df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow#if TEST_STD_VER > 14
223df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clowconstexpr bool test_constexpr()
233df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow{
243df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow    std::chrono::hours h1(3);
253df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow    std::chrono::hours h2 = h1--;
263df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow    return h1.count() == 2 && h2.count() == 3;
273df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow}
283df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow#endif
293df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow
303df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow
31c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantint main()
32c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{
333df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow    {
343df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow    std::chrono::hours h1(3);
353df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow    std::chrono::hours h2 = h1--;
363df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow    assert(h1.count() == 2);
37c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    assert(h2.count() == 3);
383df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow    }
393df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow
403df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow#if TEST_STD_VER > 14
413df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow    static_assert(test_constexpr(), "");
423df90c94a3ed6da4c0fceaa3f65529c3b2034f90Marshall Clow#endif
43c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}
44