1// Copyright 2021 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef INCLUDE_CPPGC_SENTINEL_POINTER_H_ 6#define INCLUDE_CPPGC_SENTINEL_POINTER_H_ 7 8#include <cstdint> 9 10namespace cppgc { 11namespace internal { 12 13// Special tag type used to denote some sentinel member. The semantics of the 14// sentinel is defined by the embedder. 15struct SentinelPointer { 16 static constexpr intptr_t kSentinelValue = 0b10; 17 template <typename T> 18 operator T*() const { 19 return reinterpret_cast<T*>(kSentinelValue); 20 } 21 // Hidden friends. 22 friend bool operator==(SentinelPointer, SentinelPointer) { return true; } 23 friend bool operator!=(SentinelPointer, SentinelPointer) { return false; } 24}; 25 26} // namespace internal 27 28constexpr internal::SentinelPointer kSentinelPointer; 29 30} // namespace cppgc 31 32#endif // INCLUDE_CPPGC_SENTINEL_POINTER_H_ 33