This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of CD1 status.

### 611. Standard library templates and incomplete types

Section: 16.4.5.8 [res.on.functions] Status: CD1 Submitter: Nicola Musatti Opened: 2006-11-13 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [res.on.functions].

View all issues with CD1 status.

Discussion:

In the latest available draft standard (N2134) § 17.4.3.6 [res.on.functions] states:

> -1- In certain cases (replacement functions, handler functions, operations on types used to instantiate standard library template components), the C++ Standard Library depends on components supplied by a C++ program. If these components do not meet their requirements, the Standard places no requirements on the implementation.

> -2- In particular, the effects are undefined in the following cases:

> [...]

> - if an incomplete type (3.9) is used as a template argument when instantiating a template component.

This is contradicted by § 20.6.6.2/2 [util.smartptr.shared] which states:

> [...]

> The template parameter `T` of `shared_ptr` may be an incomplete type.

Proposed resolution:

Modify the last bullet of § 17.4.3.6/2 [res.on.functions] to allow for exceptions:

> - if an incomplete type (3.9) is used as a template argument when instantiating a template component, unless specifically allowed for the component.