1// Copyright 2018 The Chromium Authors 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// This is a "No Compile Test" suite. 6// http://dev.chromium.org/developers/testing/no-compile-tests 7 8#include <type_traits> 9 10#include "base/observer_list.h" 11 12namespace base { 13 14void CannotUseCheckedObserverInUncheckedList() { 15 struct Observer : public CheckedObserver { 16 void OnObserve() {} 17 }; 18 ObserverList<Observer>::Unchecked list; 19 for (auto& observer : list) // expected-error@base/observer_list_internal.h:* {{CheckedObserver classes must not use ObserverList<T>::Unchecked}} 20 observer.OnObserve(); 21} 22 23void CannotUseUncheckedObserverInCheckedList() { 24 struct UncheckedObserver { 25 void OnObserve() {} 26 }; 27 ObserverList<UncheckedObserver> list; 28 for (auto& observer : list) // expected-error@base/observer_list_internal.h:* {{Observers should inherit from base::CheckedObserver.}} 29 observer.OnObserve(); // expected-error@*:* {{static_cast from 'base::CheckedObserver *' to 'UncheckedObserver *', which are not related by inheritance, is not allowed}} 30} 31 32} // namespace base 33