blob: 6e02a9f8527640cea2fdbbc97cb0774a5d62fc1e [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Internal implementation details for MultiToken. Only intended to be included
// from multi_token.h.
#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_TOKENS_MULTI_TOKEN_INTERNAL_H_
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_TOKENS_MULTI_TOKEN_INTERNAL_H_
#include <type_traits>
#include "base/types/token_type.h"
namespace blink::internal {
template <typename T>
struct IsBaseTokenType : std::false_type {};
template <typename T>
struct IsBaseTokenType<base::TokenType<T>> : std::true_type {};
template <typename T>
concept IsBaseToken = IsBaseTokenType<T>::value;
template <typename... Types>
bool AreAllUnique;
template <>
inline constexpr bool AreAllUnique<> = true;
template <typename T, typename... Ts>
inline constexpr bool AreAllUnique<T, Ts...> =
(!std::is_same_v<T, Ts> && ...) && AreAllUnique<Ts...>;
template <typename T, typename... Ts>
concept IsCompatible = (std::is_same_v<T, Ts> || ...);
} // namespace blink::internal
#endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_TOKENS_MULTI_TOKEN_INTERNAL_H_