blob: 0e172663ecaed36ff28b2a5e6651c92f9fc33aa6 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_SCOPED_OBSERVATION_TRAITS_INTERNAL_H_
#define BASE_SCOPED_OBSERVATION_TRAITS_INTERNAL_H_
#include <type_traits>
namespace base::internal {
struct HasAddAndRemoveObserverMethodsHelper {
template <class Source, class Observer>
static auto Validate(Source* source, Observer* observer)
-> decltype(source->AddObserver(observer),
source->RemoveObserver(observer),
std::true_type());
template <class...>
static auto Validate(...) -> std::false_type;
};
template <class Source, class Observer>
inline constexpr bool HasAddAndRemoveObserverMethods =
decltype(HasAddAndRemoveObserverMethodsHelper::Validate<Source, Observer>(
nullptr,
nullptr))::value;
} // namespace base::internal
#endif // BASE_SCOPED_OBSERVATION_TRAITS_INTERNAL_H_