Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6956137
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T14:49:44+00:00 2026-05-27T14:49:44+00:00

First read Herb’s Sutters GotW posts concerning pimpl in C++11: GotW #100: Compilation Firewalls

  • 0

First read Herb’s Sutters GotW posts concerning pimpl in C++11:

  • GotW #100: Compilation Firewalls (Difficulty: 6/10)

  • GotW #101: Compilation Firewalls, Part 2 (Difficulty: 8/10)

I’m having some trouble understanding the solution proposed in GotW #101. As far as I can understand, all the problems laboriously solved in GotW #100 are back with a vengeance:

  • The pimpl members are out-of-line templates, and the definitions are not visible at the point of use (in class widget‘s class definition and implicitly generated special member functions of widget). There aren’t any explicit instantiations either. This will cause unresolved external errors during linking.

  • widget::impl is still incomplete at the point where pimpl<widget::impl>::~pimpl() is instantiated defined (I don’t think it actually IS instantiated at all, just referenced). So std::unique_ptr<widget::impl>::~unique_ptr() calls delete on a pointer to incomplete type, which produces undefined behavior if widget::impl has a non-trivial destructor.

Please explain what forces the compiler to generate the special members in a context where widget::impl is complete. Because I can’t see how this works.


If GotW #101 still requires explicit definition of widget::~widget() in the implementation file, where widget::impl is complete, then please explain the “More Robust” comment (which @sehe quoted in his answer).

I’m looking at the core claim of GotW #101 that the wrapper “eliminates some pieces of boilerplate”, which seems to me (based on the remainder of the paragraph) to mean the widget::~widget() declaration and definition. So please don’t rely on that in your answer, in GotW #101, that’s gone!


Herb, if you stop by, please let me know if it would be ok to cut+paste the solution code here for reference.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T14:49:45+00:00Added an answer on May 27, 2026 at 2:49 pm

    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.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

First I've read loads of posts and sites that recommend going to http://silverlight.net/GetStarted/ to
I recall when I first read Pragmatic Programmer that they suggested using scripting languages
Having just read the first four chapters of Refactoring: Improving the Design of Existing
I have read my first book on c# and feel completely clueless about LINQ.
I've read Head First Java, and I understand how OOP works. Here's my problem:
How can I read the first line from a text file using a Windows
First let me say I have read this useful article thoroughly and am using
I read an article entitled Tags First GWT , in which the writer suggests
I just read about the breadth-first search algorithm in the Introduction to Algorithms book
History: I read from one of Knuth's algorithm book that first computers used the

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.