You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
			
		
		
		
		
			
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| // UNSUPPORTED: c++98, c++03, c++11, c++14, c++17
 | |
| 
 | |
| // <chrono>
 | |
| // class year;
 | |
| 
 | |
| // constexpr year operator-(const year& x, const years& y) noexcept;
 | |
| //   Returns: x + -y.
 | |
| //
 | |
| // constexpr years operator-(const year& x, const year& y) noexcept;
 | |
| //   Returns: If x.ok() == true and y.ok() == true, returns a value m in the range
 | |
| //   [years{0}, years{11}] satisfying y + m == x.
 | |
| //   Otherwise the value returned is unspecified.
 | |
| //   [Example: January - February == years{11}. —end example]
 | |
| 
 | |
| extern "C" int printf(const char *, ...);
 | |
| 
 | |
| #include <chrono>
 | |
| #include <type_traits>
 | |
| #include <cassert>
 | |
| 
 | |
| #include "test_macros.h"
 | |
| 
 | |
| template <typename Y, typename Ys>
 | |
| constexpr bool testConstexpr()
 | |
| {
 | |
|     Y y{2313};
 | |
|     Ys offset{1006};
 | |
|     if (y - offset != Y{1307}) return false;
 | |
|     if (y - Y{1307} != offset) return false;
 | |
|     return true;
 | |
| }
 | |
| 
 | |
| int main(int, char**)
 | |
| {
 | |
|     using year  = std::chrono::year;
 | |
|     using years = std::chrono::years;
 | |
| 
 | |
|     ASSERT_NOEXCEPT(                 std::declval<year>() - std::declval<years>());
 | |
|     ASSERT_SAME_TYPE(year , decltype(std::declval<year>() - std::declval<years>()));
 | |
| 
 | |
|     ASSERT_NOEXCEPT(                 std::declval<year>() - std::declval<year>());
 | |
|     ASSERT_SAME_TYPE(years, decltype(std::declval<year>() - std::declval<year>()));
 | |
| 
 | |
|     static_assert(testConstexpr<year, years>(), "");
 | |
| 
 | |
|     year y{1223};
 | |
|     for (int i = 1100; i <= 1110; ++i)
 | |
|     {
 | |
|         year  y1 = y - years{i};
 | |
|         years ys1 = y - year{i};
 | |
|         assert(static_cast<int>(y1) == 1223 - i);
 | |
|         assert(ys1.count()          == 1223 - i);
 | |
|     }
 | |
| 
 | |
|   return 0;
 | |
| }
 |