14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "weak_ptr_factory.h"
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace should_succeed {
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class OnlyMember {
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::WeakPtrFactory<OnlyMember> factory_;
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class FactoryLast {
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool bool_member_;
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  int int_member_;
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::WeakPtrFactory<FactoryLast> factory_;
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class FactoryRefersToOtherType {
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool bool_member_;
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::WeakPtrFactory<bool> bool_ptr_factory_;
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class FirstFactoryRefersToOtherType {
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool bool_member_;
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::WeakPtrFactory<bool> bool_ptr_factory_;
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  int int_member_;
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::WeakPtrFactory<FirstFactoryRefersToOtherType> factory_;
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace should_succeed
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace should_fail {
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class FactoryFirst {
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::WeakPtrFactory<FactoryFirst> factory_;
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  int int_member;
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class FactoryMiddle {
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool bool_member_;
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::WeakPtrFactory<FactoryMiddle> factory_;
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  int int_member_;
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace should_fail
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)int main() {
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
50