mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 13:57:57 -07:00
b08653d69d
std::optional makes a few things a bit neater and less error prone. However, we still cannot use C++17 (unfortunately), so this commit adds an implementation of std::optional that we can use right now. Based on https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/lib/gtl/optional.h which seems to be fairly similar to C++17's <optional> and standards compliant. It's one of the few implementations that handle propagating type traits like copy constructibility, just like libc++/libstdc++.
44 lines
810 B
C++
44 lines
810 B
C++
// Copyright 2017 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
// MPark.Variant
|
|
//
|
|
// Copyright Michael Park, 2015-2017
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0.
|
|
// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
|
|
|
#include <cstddef>
|
|
|
|
namespace std
|
|
{
|
|
struct in_place_t
|
|
{
|
|
explicit in_place_t() = default;
|
|
};
|
|
|
|
template <std::size_t I>
|
|
struct in_place_index_t
|
|
{
|
|
explicit in_place_index_t() = default;
|
|
};
|
|
|
|
template <typename T>
|
|
struct in_place_type_t
|
|
{
|
|
explicit in_place_type_t() = default;
|
|
};
|
|
|
|
constexpr in_place_t in_place{};
|
|
|
|
template <std::size_t I>
|
|
constexpr in_place_index_t<I> in_place_index{};
|
|
|
|
template <typename T>
|
|
constexpr in_place_type_t<T> in_place_type{};
|
|
|
|
} // namespace std
|