| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- #pragma once
- namespace regex
- {
- struct Nothing { };
- template<typename T0, typename T1, typename T2 = Nothing, typename T3 = Nothing>
- class Tuple
- {
- T0 first;
- T1 second;
- T2 third;
- T3 forth;
- public:
- Tuple(T0 first, T1 second)
- : first(first), second(second)
- {
- CompileAssert(sizeof(T2)==sizeof(Nothing));
- CompileAssert(sizeof(T3)==sizeof(Nothing));
- }
- Tuple(T0 first, T1 second, T2 third)
- : first(first), second(second), third(third)
- {
- CompileAssert(sizeof(T3)==sizeof(Nothing));
- }
- T0 First() const
- {
- return first;
- }
- T1 Second() const
- {
- return second;
- }
- T2 Third() const
- {
- CompileAssert(sizeof(T2)!=sizeof(Nothing));
- return third;
- }
- T3 Forth() const
- {
- CompileAssert(sizeof(T3)!=sizeof(Nothing));
- return forth;
- }
- };
- }
|