libDwm-0.9.45
DwmVariantFromIndex.hh
Go to the documentation of this file.
1
//===========================================================================
2
// @(#) $DwmPath$
3
// @(#) $Id$
4
//===========================================================================
5
// Copyright (c) Daniel W. McRobb 2020
6
// All rights reserved.
7
//
8
// Redistribution and use in source and binary forms, with or without
9
// modification, are permitted provided that the following conditions
10
// are met:
11
//
12
// 1. Redistributions of source code must retain the above copyright
13
// notice, this list of conditions and the following disclaimer.
14
// 2. Redistributions in binary form must reproduce the above copyright
15
// notice, this list of conditions and the following disclaimer in the
16
// documentation and/or other materials provided with the distribution.
17
// 3. The names of the authors and copyright holders may not be used to
18
// endorse or promote products derived from this software without
19
// specific prior written permission.
20
//
21
// IN NO EVENT SHALL DANIEL W. MCROBB BE LIABLE TO ANY PARTY FOR
22
// DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
23
// INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE,
24
// EVEN IF DANIEL W. MCROBB HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
25
// DAMAGE.
26
//
27
// THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND
28
// DANIEL W. MCROBB HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT,
29
// UPDATES, ENHANCEMENTS, OR MODIFICATIONS. DANIEL W. MCROBB MAKES NO
30
// REPRESENTATIONS AND EXTENDS NO WARRANTIES OF ANY KIND, EITHER
31
// IMPLIED OR EXPRESS, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
32
// WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE,
33
// OR THAT THE USE OF THIS SOFTWARE WILL NOT INFRINGE ANY PATENT,
34
// TRADEMARK OR OTHER RIGHTS.
35
//===========================================================================
36
37
//---------------------------------------------------------------------------
41
//---------------------------------------------------------------------------
42
43
#ifndef _DWMVARIANTFROMINDEX_HH_
44
#define _DWMVARIANTFROMINDEX_HH_
45
46
#include <array>
47
#include <cassert>
48
#include <variant>
49
50
namespace
Dwm {
51
52
//------------------------------------------------------------------------
55
//------------------------------------------------------------------------
56
template
<
typename
... Ts>
57
std::variant<Ts...>
VariantFromIndex
(
size_t
index)
58
{
59
assert(index <
sizeof
...(Ts));
60
static
constexpr
auto
tbl =
61
std::array{ +[](){
return
std::variant<Ts...>{Ts{ }}; }... };
62
return
tbl[index]();
63
}
64
65
66
}
// namespace Dwm
67
68
#endif
// _DWMVARIANTFROMINDEX_HH_
Dwm::VariantFromIndex
std::variant< Ts... > VariantFromIndex(size_t index)
Returns a variant type V whose contents are set to a default constructed value of the type at index i...
Definition
DwmVariantFromIndex.hh:57
classes
include
DwmVariantFromIndex.hh
dwm