   boost::signal and copy constructor call
  I'm confused as to why this code doesn't compile:struct view {};template<class T>struct behaviour {explicit behaviour(T& t):t(t) {}boost::signals2::signal<void ()> sig; // <--private:T& t;};template<class View, template<class> class Behaviour>struct test : public View, public Behaviour<View> {test():Behaviour<View>(*this) {}};int main(int, char*[]) {typedef test<view, behaviour> test_t;shared_ptr<test_t> t(new test_t);}// compiler error:1>------ Build started: Project: testing, Configuration: Debug Win32 ------1>Compiling...1>main.cpp1>z:\my c++ projects\testing\testing\main.cpp(22) : warning C4355: 'this' : used in base member initializer list1>   z:\my c++ projects\testing\testing\main.cpp(21) : while compiling class template member function 'test<View,Behaviour>::test(void)'1>   with1>   [1>  View=view,1>  Behaviour=behaviour1>   ]1>   z:\my c++ projects\testing\testing\main.cpp(29) : see reference to class template instantiation 'test<View,Behaviour>' being compiled1>   with1>   [1>  View=view,1>  Behaviour=behaviour1>   ]1>z:\my code libraries\boost_1_42_0\boost\signals2\signal_base.hpp(29) : error C2248: 'boost::noncopyable_::noncopyable::noncopyable' : cannot access private member declared in class 'boost::noncopyable_::noncopyable'1>   z:\my code libraries\boost_1_42_0\boost\noncopyable.hpp(27) : see declaration of 'boost::noncopyable_::noncopyable::noncopyable'1>   z:\my code libraries\boost_1_42_0\boost\noncopyable.hpp(22) : see declaration of 'boost::noncopyable_::noncopyable'1>   This diagnostic occurred in the compiler generated function 'boost::signals2::signal_base::signal_base(const boost::signals2::signal_base &)'1>Build log was saved at "file://z:\My C++ Projects\testing\testing\Debug\BuildLog.htm"1>testing - 1 error(s), 1 warning(s)========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========If I comment out the signal, it compiles fine. I guess signals2::signal is derived from boost::noncopyable, but don't see why that matters. It looks like the compiler is creating a copy constructor?   
  Looks like it is generating the default shallow-copy copy constructor. Trystruct behaviour : boost::noncopyableor write a copy constructor with correct behaviour.   ;  I tried deriving behaviour from boost::noncopyable, but that didn't work either.GCC provided more information - call was ambiguous between copy constructor and the constructor defined, so static_cast<View&>(*this) seems to work.   