You are correct; the example seems to be missing an explicit template instantiation. When I try to run the example with a constructor and destructor for widget::impl
on MSVC 2010 SP1, I get a linker error for pimpl<widget::impl>::pimpl()
and pimpl<widget::impl>::~pimpl()
. When I add template class pimpl<widget::impl>;
, it links fine.
In other words, GotW #101 eliminates all boilerplate from GotW #100, but you need to add an explicit instantiation of the pimpl<...>
template with the implementation of the pimpl
impl. At least with #101 the boiler plate you need is straightforward.