63 lines
2.8 KiB
Markdown
63 lines
2.8 KiB
Markdown
[global.functions]
|
||
|
||
# 16 Library introduction [[library]](./#library)
|
||
|
||
## 16.4 Library-wide requirements [[requirements]](requirements#global.functions)
|
||
|
||
### 16.4.6 Conforming implementations [[conforming]](conforming#global.functions)
|
||
|
||
#### 16.4.6.4 Non-member functions [global.functions]
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3645)
|
||
|
||
It is unspecified whether any
|
||
non-member
|
||
functions in the C++ standard library are defined as[inline](dcl.inline "9.2.8 The inline specifier [dcl.inline]")[.](#1.sentence-1)
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3651)
|
||
|
||
A call to a non-member function signature
|
||
described in [[support]](support "17 Language support library") through [[exec]](exec "33 Execution control library") and[[depr]](depr "Annex D (normative) Compatibility features") shall behave as if the implementation declared no additional
|
||
non-member function signatures[.](#2.sentence-1)[155](#footnote-155 "A valid C++ program always calls the expected library non-member function. An implementation can also define additional non-member functions that would otherwise not be called by a valid C++ program.")
|
||
|
||
[3](#3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3663)
|
||
|
||
An implementation shall not declare a non-member function signature
|
||
with additional default arguments[.](#3.sentence-1)
|
||
|
||
[4](#4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3667)
|
||
|
||
Unless otherwise specified,
|
||
calls made by functions in the standard library to non-operator, non-member functions
|
||
do not use functions from another namespace which are found through
|
||
argument-dependent name lookup ([[basic.lookup.argdep]](basic.lookup.argdep "6.5.4 Argument-dependent name lookup"))[.](#4.sentence-1)
|
||
|
||
[*Note [1](#note-1)*:
|
||
|
||
The phrase âunless otherwise specifiedâ applies to cases such as
|
||
the swappable with requirements ([[swappable.requirements]](swappable.requirements "16.4.4.3 Swappable requirements"))[.](#4.sentence-2)
|
||
|
||
The exception for overloaded operators allows argument-dependent lookup
|
||
in cases like that of[ostream_iterator::operator=](ostream.iterator.ops#lib:ostream_iterator,operator= "24.6.3.3 Operations [ostream.iterator.ops]"):
|
||
|
||
*Effects*: **out_stream* << value;if (*delim* != 0)**out_stream* << *delim*;return *this;
|
||
|
||
â *end note*]
|
||
|
||
[155)](#footnote-155)[155)](#footnoteref-155)
|
||
|
||
A valid C++ program always
|
||
calls the expected library non-member function[.](#footnote-155.sentence-1)
|
||
|
||
An implementation can
|
||
also define additional non-member functions that would otherwise not
|
||
be called by a valid C++ program[.](#footnote-155.sentence-2)
|