blob: d67ad81b177a26e8d0d40de805a3a4c2e95fc25d [file] [log] [blame]
Torne (Richard Coles)68043e12013-09-26 13:24:57 +01001// Copyright 2013 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#include "base/callback_registry.h"
6
7#include "base/basictypes.h"
8#include "base/bind.h"
9#include "base/bind_helpers.h"
10#include "base/memory/scoped_ptr.h"
11
12namespace base {
13
14class Foo {
15 public:
16 Foo() {}
17 ~Foo() {}
18};
19
20class FooListener {
21 public:
22 FooListener() {}
23
24 void GotAScopedFoo(scoped_ptr<Foo> f) { foo_ = f.Pass(); }
25
26 scoped_ptr<Foo> foo_;
27
28 private:
29 DISALLOW_COPY_AND_ASSIGN(FooListener);
30};
31
32
33#if defined(NCTEST_MOVE_ONLY_TYPE_PARAMETER) // [r"calling a private constructor of class"]
34
35// Callbacks run with a move-only typed parameter.
36//
37// CallbackRegistry does not support move-only typed parameters. Notify() is
38// designed to take zero or more parameters, and run each registered callback
39// with them. With move-only types, the parameter will be set to NULL after the
40// first callback has been run.
41void WontCompile() {
42 FooListener f;
43 CallbackRegistry<void(scoped_ptr<Foo>)> c1;
44 scoped_ptr<CallbackRegistry<void(scoped_ptr<Foo>)>::Subscription> sub =
45 c1.Add(Bind(&FooListener::GotAScopedFoo, Unretained(&f)));
46 c1.Notify(scoped_ptr<Foo>(new Foo()));
47}
48
49#endif
50
51} // namespace base