The set of
diagnosable rules
consists of all syntactic and semantic rules in this document
except for those rules containing an explicit notation that
“no diagnostic is required” or which are described as resulting in
“undefined behavior”.
Although this document states only requirements on C++
implementations, those requirements are often easier to understand if
they are phrased as requirements on programs, parts of programs, or
execution of programs.
If a program contains no violations of the rules in
[lex] through [thread] and [depr],
a conforming implementation shall,
within its resource limits as described in [implimits],
accept and correctly execute5
that program.
If a program contains a violation of any diagnosable rule or an occurrence
of a construct described in this document as “conditionally-supported” when
the implementation does not support that construct, a conforming implementation
shall issue at least one diagnostic message.
If a program contains a violation of a rule for which no diagnostic
is required, this document places no requirement on
implementations with respect to that program.
During template argument deduction and substitution,
certain constructs that in other contexts require a diagnostic
are treated differently;
see [temp.deduct].
For classes and class templates, the library Clauses specify partial
definitions.
Private members are not
specified, but each implementation shall supply them to complete the
definitions according to the description in the library Clauses.
The names defined in the library have namespace
scope ([basic.namespace]).
A C++ translation
unit ([lex.phases]) obtains access to these names by including the
appropriate standard library header or importing
the appropriate standard library named header unit ([using.headers]).
The templates, classes, functions, and objects in the library have
external linkage.
The implementation provides
definitions for standard library entities, as necessary, while combining
translation units to form a complete C++ program ([lex.phases]).
For a hosted implementation, this
document defines the set of available libraries.
A freestanding
implementation is one in which execution may take place without the benefit of
an operating system, and has an implementation-defined set of libraries that includes certain language-support
libraries ([compliance]).
A conforming implementation may have extensions (including
additional library functions), provided they do not alter the
behavior of any well-formed program.
Implementations are required to diagnose programs that use such
extensions that are ill-formed according to this document.
Having done so, however, they can compile and execute such programs.
Each implementation shall include documentation that identifies all
conditionally-supported constructs
that it does not support and defines all locale-specific characteristics.6