blob: 2d464cf1f1ba9c50488d3d9028d3d4110b5ae322 [file] [log] [blame]
caitkp@google.com2b10b742013-09-25 22:56:23 +09001// 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
caitkp@chromium.org49647322013-09-27 04:20:18 +09005#include "base/callback_list.h"
caitkp@google.com2b10b742013-09-25 22:56:23 +09006
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//
caitkp@chromium.org49647322013-09-27 04:20:18 +090037// CallbackList does not support move-only typed parameters. Notify() is
caitkp@google.com2b10b742013-09-25 22:56:23 +090038// 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;
caitkp@chromium.org49647322013-09-27 04:20:18 +090043 CallbackList<void(scoped_ptr<Foo>)> c1;
44 scoped_ptr<CallbackList<void(scoped_ptr<Foo>)>::Subscription> sub =
caitkp@google.com2b10b742013-09-25 22:56:23 +090045 c1.Add(Bind(&FooListener::GotAScopedFoo, Unretained(&f)));
46 c1.Notify(scoped_ptr<Foo>(new Foo()));
47}
48
49#endif
50
51} // namespace base