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
50namespace 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_
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