tmp/tmpjy04nujp/{from.md → to.md}
RENAMED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
### General <a id="intro.compliance.general">[[intro.compliance.general]]</a>
|
| 2 |
+
|
| 3 |
+
The set of *diagnosable rules* consists of all syntactic and semantic
|
| 4 |
+
rules in this document except for those rules containing an explicit
|
| 5 |
+
notation that “no diagnostic is required” or which are described as
|
| 6 |
+
resulting in “undefined behavior”.
|
| 7 |
+
|
| 8 |
+
Although this document states only requirements on C++ implementations,
|
| 9 |
+
those requirements are often easier to understand if they are phrased as
|
| 10 |
+
requirements on programs, parts of programs, or execution of programs.
|
| 11 |
+
Such requirements have the following meaning:
|
| 12 |
+
|
| 13 |
+
- If a program contains no violations of the rules in [[lex]] through
|
| 14 |
+
[[thread]] and [[depr]], a conforming implementation shall, within its
|
| 15 |
+
resource limits as described in [[implimits]], accept and correctly
|
| 16 |
+
execute[^3] that program.
|
| 17 |
+
- If a program contains a violation of a rule for which no diagnostic is
|
| 18 |
+
required, this document places no requirement on implementations with
|
| 19 |
+
respect to that program.
|
| 20 |
+
- Otherwise, if a program contains a violation of any diagnosable rule
|
| 21 |
+
or an occurrence of a construct described in this document as
|
| 22 |
+
“conditionally-supported” when the implementation does not support
|
| 23 |
+
that construct, a conforming implementation shall issue at least one
|
| 24 |
+
diagnostic message.
|
| 25 |
+
|
| 26 |
+
[*Note 1*: During template argument deduction and substitution, certain
|
| 27 |
+
constructs that in other contexts require a diagnostic are treated
|
| 28 |
+
differently; see [[temp.deduct]]. — *end note*]
|
| 29 |
+
|
| 30 |
+
Furthermore, a conforming implementation
|
| 31 |
+
|
| 32 |
+
- shall not accept a preprocessing translation unit containing a
|
| 33 |
+
`#error` preprocessing directive [[cpp.error]],
|
| 34 |
+
- shall issue at least one diagnostic message for each `#warning` or
|
| 35 |
+
`#error` preprocessing directive not following a `#error`
|
| 36 |
+
preprocessing directive in a preprocessing translation unit, and
|
| 37 |
+
- shall not accept a translation unit with a *static_assert-declaration*
|
| 38 |
+
that fails [[dcl.pre]].
|
| 39 |
+
|
| 40 |
+
For classes and class templates, the library Clauses specify partial
|
| 41 |
+
definitions. Private members [[class.access]] are not specified, but
|
| 42 |
+
each implementation shall supply them to complete the definitions
|
| 43 |
+
according to the description in the library Clauses.
|
| 44 |
+
|
| 45 |
+
For functions, function templates, objects, and values, the library
|
| 46 |
+
Clauses specify declarations. Implementations shall supply definitions
|
| 47 |
+
consistent with the descriptions in the library Clauses.
|
| 48 |
+
|
| 49 |
+
A C++ translation unit [[lex.phases]] obtains access to the names
|
| 50 |
+
defined in the library by including the appropriate standard library
|
| 51 |
+
header or importing the appropriate standard library named header unit
|
| 52 |
+
[[using.headers]].
|
| 53 |
+
|
| 54 |
+
The templates, classes, functions, and objects in the library have
|
| 55 |
+
external linkage [[basic.link]]. The implementation provides definitions
|
| 56 |
+
for standard library entities, as necessary, while combining translation
|
| 57 |
+
units to form a complete C++ program [[lex.phases]].
|
| 58 |
+
|
| 59 |
+
Two kinds of implementations are defined: a *hosted implementation* and
|
| 60 |
+
a *freestanding implementation*. A freestanding implementation is one in
|
| 61 |
+
which execution may take place without the benefit of an operating
|
| 62 |
+
system. A hosted implementation supports all the facilities described in
|
| 63 |
+
this document, while a freestanding implementation supports the entire
|
| 64 |
+
C++ language described in [[lex]] through [[cpp]] and the subset of the
|
| 65 |
+
library facilities described in [[compliance]].
|
| 66 |
+
|
| 67 |
+
A conforming implementation may have extensions (including additional
|
| 68 |
+
library functions), provided they do not alter the behavior of any
|
| 69 |
+
well-formed program. Implementations are required to diagnose programs
|
| 70 |
+
that use such extensions that are ill-formed according to this document.
|
| 71 |
+
Having done so, however, they can compile and execute such programs.
|
| 72 |
+
|
| 73 |
+
Each implementation shall include documentation that identifies all
|
| 74 |
+
conditionally-supported constructs that it does not support and defines
|
| 75 |
+
all locale-specific characteristics.[^4]
|
| 76 |
+
|