1// Copyright (c) 2011 The Chromium 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// This is a "No Compile Test" suite. 6// http://dev.chromium.org/developers/testing/no-compile-tests 7 8#include "base/callback.h" 9 10namespace base { 11 12class Parent { 13}; 14 15class Child : Parent { 16}; 17 18#if defined(NCTEST_EQUALS_REQUIRES_SAMETYPE) // [r"fatal error: no viable conversion from 'RepeatingCallback<int \(\)>' to 'const RepeatingCallback<void \(\)>'"] 19 20// Attempting to call comparison function on two callbacks of different type. 21// 22// This should be a compile time failure because each callback type should be 23// considered distinct. 24void WontCompile() { 25 Closure c1; 26 Callback<int()> c2; 27 c1.Equals(c2); 28} 29 30#elif defined(NCTEST_CONSTRUCTION_FROM_SUBTYPE) // [r"fatal error: no viable conversion from 'Callback<base::Parent \(\)>' to 'Callback<base::Child \(\)>'"] 31 32// Construction of Callback<A> from Callback<B> if A is supertype of B. 33// 34// While this is technically safe, most people aren't used to it when coding 35// C++ so if this is happening, it is almost certainly an error. 36void WontCompile() { 37 Callback<Parent()> cb_a; 38 Callback<Child()> cb_b = cb_a; 39} 40 41#elif defined(NCTEST_ASSIGNMENT_FROM_SUBTYPE) // [r"fatal error: no viable overloaded '='"] 42 43// Assignment of Callback<A> from Callback<B> if A is supertype of B. 44// See explanation for NCTEST_CONSTRUCTION_FROM_SUBTYPE 45void WontCompile() { 46 Callback<Parent()> cb_a; 47 Callback<Child()> cb_b; 48 cb_a = cb_b; 49} 50 51#endif 52 53} // namespace base 54