The table below tracks the status of the C++ Committee's issues in the implementation of stdcxx.

Status of C++ Issues

ISSUE

DESCRIPTION

STATUS

JIRA / REVISION

{i}

1

C library linkage editing oversight

Editorial

N/A

{i}

3

Atexit registration during atexit() call is not described

Editorial

N/A

(./)

5

string::compare specification questionable

DONE

N/A

{*}

17

Bad bool parsing

CHECK

{*}

18

get(...bool&) omitted

{*}

19

noconv definition too vague

{*}

20

thousands_sep returns wrong type

{*}

21

codecvt_byname<> instantiations

{*}

22

Member open vs. flags

{*}

24

do_convert doesn't exist

{*}

25

String operator<< uses width() value wrong

{*}

26

Bad sentry example

{*}

27

string::erase(range) yields wrong iterator

{*}

28

ctype<char> is ambiguous

{*}

29

Ios_base::init doesn't exist

{*}

30

Wrong header for LC_*

{*}

31

Immutable locale values

{*}

32

pbackfail description inconsistent

{*}

33

codecvt<> mentions from_type

{*}

34

true/falsename() not in ctype<>

{*}

35

No manipulator unitbuf in synopsis

{*}

36

iword & pword storage lifetime omitted

{*}

37

Leftover global reference

{*}

38

Facet definition incomplete

{*}

39

istreambuf_iterator<>::operator++(int) definition garbled

{*}

40

Meaningless normative paragraph in examples

{*}

41

Ios_base needs clear(), exceptions()

{*}

42

string ctors specify wrong default allocator

{*}

44

Iostreams use operator== on int_type values

{*}

46

Minor Annex D errors

{*}

47

imbue() and getloc() Returns clauses swapped

{*}

48

Use of non-existent exception constructor

{*}

49

Underspecification of ios_base::sync_with_stdio

{*}

50

Copy constructor and assignment operator of ios_base

{*}

51

Requirement to not invalidate iterators missing

{*}

52

Small I/O problems

{*}

53

basic_ios destructor unspecified

{*}

54

basic_streambuf's destructor

{*}

55

Invalid stream position is undefined

{*}

56

showmanyc's return type

{*}

57

Mistake in char_traits

{*}

59

Ambiguity in specification of gbump

{*}

60

What is a formatted input function?

{*}

61

Ambiguity in iostreams exception policy

{*}

62

ync's return value

{*}

63

Exception-handling policy for unformatted output

{*}

64

Exception handling in basic_istream::operator>>(basic_streambuf*)

{*}

66

strstreambuf::setbuf

{*}

68

Extractors for char* should store null at end

{*}

69

Must elements of a vector be contiguous?

{*}

70

uncaught_exception() missing throw() specification

{*}

71

do_get_monthname synopsis missing argument

{*}

74

Garbled text for codecvt::do_max_length

{*}

75

Contradiction in codecvt::length's argument types

{*}

76

Can a codecvt facet always convert one internal character at a time?

{i}

78

Typo: event_call_back

Editorial

{*}

79

Inconsistent declaration of polar()

{*}

80

Global Operators of complex declared twice

{*}

83

string::npos vs. string::max_size()

{*}

86

string constructors don't describe exceptions

{*}

90

Incorrect description of operator>> for strings

{*}

91

Description of operator>> and getline() for string<> might cause endless loop

{*}

92

Incomplete Algorithm Requirements

{*}

98

Input iterator requirements are badly written

{*}

103

set::iterator is required to be modifiable, but this allows modification of keys

{*}

106

Numeric library private members are implementation defined

{*}

108

Lifetime of exception::what() return unspecified

{*}

109

Missing binders for non-const sequence elements

{*}

110

istreambuf_iterator::equal not const

{*}

112

Minor typo in ostreambuf_iterator constructor

{*}

114

Placement forms example in error twice

{*}

115

Typo in strstream constructors

{*}

117

basic_ostream uses nonexistent num_put member functions

{*}

118

basic_istream uses nonexistent num_get member functions

{*}

119

Should virtual functions be allowed to strengthen the exception specification?

{*}

120

Can an implementor add specializations?

{*}

122

streambuf/wstreambuf description should not say they are specializations

{*}

123

Should valarray helper arrays fill functions be const?

{*}

124

ctype_byname<charT>::do_scan_is & do_scan_not return type should be const charT*

{*}

125

valarray<T>::operator!() return type is inconsistent

{*}

126

typos in Effects clause of ctype::do_narrow()

{*}

127

auto_ptr<> conversion issues

{*}

129

Need error indication from seekp() and seekg()

{*}

130

Return type of container::erase(iterator) differs for associative containers

{i}

132

list::resize description uses random access iterators

Editorial

{*}

133

map missing get_allocator()

{*}

134

vector constructors over specified

{X}

135

Does unique_copy() require CopyConstructible and Assignable?

TO DO

STDCXX-241

{*}

136

seekp, seekg setting wrong streams?

{*}

137

Do use_facet and has_facet look in the global locale?

{*}

139

Optional sequence operation table description unclear

{*}

141

basic_string::find_last_of, find_last_not_of say pos instead of xpos

{*}

142

lexicographical_compare complexity wrong

{*}

144

deque constructor complexity wrong

{*}

146

complex<T> Inserter and Extractor need sentries

{*}

147

Library Intro refers to global functions that aren't global

{*}

148

Functions in the example facet BoolNames should be const

{*}

150

find_first_of says integer instead of iterator

{*}

151

Can't currently clear() empty container

{*}

152

Typo in scan_is() semantics

{*}

153

Typo in narrow() semantics

{*}

154

Missing double specifier for do_get()

{*}

155

Typo in naming the class defining the class Init

{*}

156

Typo in imbue() description

{*}

158

Underspecified semantics for setbuf()

{*}

159

Strange use of underflow()

{*}

160

Typo: Use of non-existing function exception()

{*}

161

Typo: istream_iterator vs. istreambuf_iterator

{*}

164

do_put() has apparently unused fill argument

{*}

165

xsputn(), pubsync() never called by basic_ostream members?

{*}

167

Improper use of traits_type::length()

{*}

168

Typo: formatted vs. unformatted

{*}

169

Bad efficiency of overflow() mandated

{*}

170

Inconsistent definition of traits_type

{*}

171

Strange seekpos() semantics due to joint position

{*}

172

Inconsistent types for basic_istream::ignore()

{*}

173

Inconsistent types for basic_filebuf::setbuf()

{*}

174

Typo: OFF_T vs. POS_T

{*}

175

Ambiguity for basic_streambuf::pubseekpos() and a few other functions.

{*}

176

exceptions() in ios_base...?

{*}

179

Comparison of const_iterators to iterators doesn't work

{*}

181

make_pair() unintended behavior

{*}

182

Ambiguous references to size_t

{*}

183

I/O stream manipulators don't work for wide character streams

{*}

184

numeric_limits<bool> wording problems

{*}

185

Questionable use of term inline

{*}

186

bitset::set() second parameter should be bool

{*}

187

iter_swap underspecified

{*}

189

setprecision() not specified correctly

{*}

193

Heap operations description incorrect

{*}

195

Should basic_istream::sentry's constructor ever set eofbit?

{*}

198

Validity of pointers and references unspecified after iterator destruction

{*}

199

What does allocate(0) return?

{*}

200

Forward iterator requirements don't allow constant iterators

{*}

201

numeric_limits terminology wrong

{*}

202

unique() effects unclear when predicate not an equivalence relation

{*}

206

operator new(size_t, nothrow) may become unlinked to ordinary operator new if ordinary version replaced

{*}

208

Unnecessary restriction on past-the-end iterators

{*}

209

basic_string declarations inconsistent

{*}

210

distance first and last confused

{*}

211

operator>>(istream&, string&) doesn't set failbit

{*}

212

Empty range behavior unclear for several algorithms

{*}

214

set::find() missing const overload

{i}

217

Facets example (Classifying Japanese characters) contains errors

Editorial

{*}

220

~ios_base() usage valid?

{*}

221

num_get<>::do_get stage 2 processing broken

{*}

222

Are Throw clauses necessary if a throw is already implied by the Effects clause?

{*}

223

reverse algorithm should use iter_swap rather than swap

{*}

224

clear() complexity for associative containers refers to undefined N

{*}

225

std:: algorithms use of other unqualified algorithms

{*}

226

User supplied specializations or overloads of namespace std function templates

{*}

227

std::swap() should require CopyConstructible or DefaultConstructible arguments

{*}

228

Incorrect specification of ..._byname facets

{*}

229

Unqualified references of other library entities

{*}

230

Assignable specified without also specifying CopyConstructible

(./)

231

Precision in iostream?

DONE

STDCXX-763

{*}

232

depends poorly defined in 17.4.3.1

{*}

233

Insertion hints in associative containers

{*}

234

Typos in allocator definition

{*}

235

No specification of default ctor for reverse_iterator

{*}

237

Undefined expression in complexity specification

{*}

238

Contradictory results of stringbuf initialization.

{*}

239

Complexity of unique() and/or unique_copy incorrect

{*}

240

Complexity of adjacent_find() is meaningless

{*}

241

Does unique_copy() require CopyConstructible and Assignable?

{*}

242

Side effects of function objects

{*}

243

get and getline when sentry reports failure

{*}

247

vector, deque::insert complexity

{*}

248

time_get fails to set eofbit

{*}

250

splicing invalidates iterators

{*}

251

basic_stringbuf missing allocator_type

{*}

252

missing casts/C-style casts used in iostreams

{*}

253

valarray helper functions are almost entirely useless

{*}

254

Exception types in clause 19 are constructed from std::string

{*}

256

typo in 27.4.4.2, p17: copy_event does not exist

{*}

258

Missing allocator requirement

{*}

259

basic_string::operator[] and const correctness

{*}

260

Inconsistent return type of istream_iterator::operator++(int)

{*}

261

Missing description of istream_iterator::operator!=

{*}

262

Bitmask operator~ specified incorrectly

{*}

263

Severe restriction on basic_string reference counting

{*}

264

Associative container insert(i, j) complexity requirements are not feasible.

{*}

265

std::pair::pair() effects overly restrictive

{*}

266

bad_exception::~bad_exception() missing Effects clause

{*}

268

Typo in locale synopsis

{*}

270

binary_search requirements overly strict

{*}

271

basic_iostream missing typedefs

{i}

272

Missing parentheses around subexpression

Editorial

{i}

273

Missing ios_base qualification on members of a dependent class

Editorial

{*}

274

a missing/impossible allocator requirement

{*}

275

Wrong type in num_get::get() overloads

{*}

276

Assignable requirement for container value_type overly strict

{*}

278

What does iterator validity mean?

{*}

280

Comparison of reverse_iterator to const reverse_iterator

{*}

281

std::min() and max() requirements overly restrictive

{*}

282

What types does numpunct::grouping refer to?

{*}

283

std::replace() requirement incorrect/insufficient

{*}

284

unportable example in 20.3.7, p6

{*}

285

minor editorial errors in fstream ctors

{*}

286

<cstdlib> requirements missing size_t typedef

{*}

288

<cerrno> requirements missing macro EILSEQ

{*}

291

Underspecification of set algorithms

{*}

292

effects of a.copyfmt (a)

{*}

294

User defined macros and standard headers

{*}

295

Is abs defined in <cmath>?

{*}

297

const_mem_fun_t<>::argument_type should be const T*

{*}

298

::operator delete[] requirement incorrect/insufficient

{*}

300

list::merge() specification incomplete

{*}

301

basic_string template ctor effects clause omits allocator argument

{*}

303

bitset input operator underspecified

{*}

305

Default behavior of codecvt<wchar_t, char, mbstate_t>::length()

{*}

306

offsetof macro and non-POD types

{*}

307

Lack of reference typedefs in container adaptors

{*}

308

Table 82 mentions unrelated headers

{*}

310

Is errno a macro?

{*}

311

Incorrect wording in basic_ostream class synopsis

{*}

312

Table 27 is missing headers

{*}

315

Bad "range" in list::unique complexity

{*}

316

Vague text in Table 69

{*}

317

Instantiation vs. specialization of facets

{*}

318

Misleading comment in definition of numpunct_byname

{*}

319

Storage allocation wording confuses "Required behavior", "Requires"

{*}

320

list::assign overspecified

{*}

321

Typo in num_get

{*}

322

iterator and const_iterator should have the same value type

{*}

324

Do output iterators have value types?

{*}

325

Misleading text in moneypunct<>::do_grouping

{*}

327

Typo in time_get facet in table 52

{*}

328

Bad sprintf format modifier in money_put<>::do_put()

{*}

329

vector capacity, reserve and reallocation

{*}

331

bad declaration of destructor for ios_base::failure

{*}

333

does endl imply synchronization with the device?

{*}

334

map::operator[] specification forces inefficient implementation

{*}

335

minor issue with char_traits, table 37

{*}

336

Clause 17 lack of references to deprecated headers

{*}

337

replace_copy_if's template parameter should be InputIterator

{*}

338

is whitespace allowed between '-' and a digit?

{*}

339

definition of bitmask type restricted to clause 27

{*}

340

interpretation of has_facet<Facet>(loc)

{*}

341

Vector reallocation and swap

{*}

345

type tm in <cwchar>

{*}

346

Some iterator member functions should be const

{*}

347

locale::category and bitmask requirements

{*}

349

Minor typographical error in ostream_iterator

{*}

352

missing fpos requirements

{*}

354

Associative container lower/upper_bound requirements

{*}

355

Operational semantics for a.back()

{*}

358

interpreting thousands_sep after a decimal_point

{*}

359

num_put<>::do_put (..., bool) undocumented

{*}

360

locale mandates inefficient implementation

{*}

362

bind1st/bind2nd type safety

{*}

363

Missing exception specification in 27.4.2.1.1

{*}

364

Inconsistent wording in 27.5.2.4.2

{*}

365

Lack of const-qualification in clause 27

{*}

369

io stream objects and static ctors

{*}

370

Minor error in basic_istream::get

{*}

371

Stability of multiset and multimap member functions

{*}

373

Are basic_istream and basic_ostream to use (exceptions()&badbit) != 0 ?

{*}

375

basic_ios should be ios_base in 27.7.1.3

{*}

376

basic_streambuf semantics

{*}

379

nonsensical ctype::do_widen() requirement

{*}

380

typos in codecvt tables 53 and 54

{*}

381

detection of invalid mbstate_t in codecvt

{*}

383

Bidirectional iterator assertion typo

{*}

384

equal_range has unimplementable runtime complexity

{*}

386

Reverse iterator's operator[] has impossible return type

{*}

387

std::complex over-encapsulated

{*}

389

Const overload of valarray::operator[] returns by value

{*}

391

non-member functions specified as const

{*}

395

inconsistencies in the definitions of rand() and random_shuffle()

{*}

400

redundant type cast in lib.allocator.members

{*}

401

incorrect type casts in table 32 in lib.allocator.requirements

{*}

402

wrong new expression in [some_]allocator::construct

{*}

403

basic_string::swap should not throw exceptions

{*}

404

May a replacement allocation function be declared inline?

{*}

405

qsort and POD

{*}

406

vector::insert(s) exception safety

{*}

407

Can singular iterators be destroyed?

{*}

409

Closing an fstream should clear error state

{*}

410

Missing semantics for stack and queue comparison operators

{*}

411

Wrong names of set member functions

{*}

412

Typo in 27.4.4.3

{*}

413

Proposed resolution to LDR#64 still wrong

{*}

414

Which iterators are invalidated by v.erase()?

{*}

415

behavior of std::ws

{*}

416

definitions of XXX_MIN and XXX_MAX macros in climits

{*}

420

is std::FILE a complete type?

{*}

422

explicit specializations of member functions of class templates

{*}

425

return value of std::get_temporary_buffer

{*}

426

search_n(), fill_n(), and generate_n() with negative n

{*}

428

string::erase(iterator) validity

{*}

432

stringbuf::overflow() makes only one write position available

{*}

434

bitset::to_string() hard to use

{*}

435

bug in DR 25

{*}

436

are cv-qualified facet types valid facets?

{*}

438

Ambiguity in the "do the right thing" clause

{*}

441

Is fpos::state const?

{*}

442

sentry::operator bool() inconsistent signature

{*}

443

filebuf::close() inconsistent use of EOF

{*}

444

Bad use of casts in fstream

{*}

445

iterator_traits::reference unspecified for some iterator categories

{*}

448

Random Access Iterators over abstract classes

{*}

449

Library Issue 306 Goes Too Far

(./)

453

basic_stringbuf::seekoff need not always fail for an empty stream

DONE

STDCXX-332

{*}

455

cerr::tie() and wcerr::tie() are overspecified

{*}

456

Traditional C header files are overspecified

{*}

457

bitset constructor: incorrect number of initialized bits

{*}

460

Default modes missing from basic_fstream member specifications

{*}

461

time_get hard or impossible to implement

{*}

464

Suggestion for new member functions in standard containers

{*}

465

Contents of <ciso646>

(./)

467

char_traits::lt(), compare(), and memcmp()

DONE

STDCXX-214

{*}

468

unexpected consequences of ios_base::operator void*()

{*}

469

vector<bool> ill-formed relational operators

{*}

474

confusing Footnote 297

{*}

475

May the function object passed to for_each modify the elements of the iterated sequence?

{*}

478

Should forward iterator requirements table have a line for r->m?

{*}

488

rotate throws away useful information

{*}

495

Clause 22 template parameter requirements

{*}

496

Illegal use of T in vector<bool>

{*}

497

meaning of numeric_limits::traps for floating point types

{*}

505

result_type in random distribution requirements

{*}

507

Missing requirement for variate_generator::operator()

{*}

508

Bad parameters for ranlux64_base_01

{*}

518

Are insert and erase stable for unordered_multiset and unordered_multimap?

{*}

519

data() undocumented

{*}

520

result_of and pointers to data members

{*}

521

Garbled requirements for argument_type in reference_wrapper

{*}

524

regex named character classes and case-insensitivity don't mix

{*}

527

tr1::bind has lost its Throws clause

{*}

530

Must elements of a string be contiguous?

{*}

531

array forms of unformatted input functions

{*}

533

typo in 2.2.3.10/1

{*}

534

Missing basic_string members

{*}

535

std::string::swap specification poorly worded

{*}

537

Typos in the signatures in 27.6.1.3/42-43 and 27.6.2.4

{*}

538

241 again: Does unique_copy() require CopyConstructible and Assignable?

{*}

540

shared_ptr<void>::operator*()

{*}

541

shared_ptr template assignment and void

{*}

542

shared_ptr observers

{*}

543

valarray slice default constructor

{*}

545

When is a deleter deleted?

{*}

550

What should the return type of pow(float,int) be?

{*}

551

<ccomplex>

{*}

552

random_shuffle and its generator

(./)

559

numeric_limits<const T>

DONE

STDCXX-151

{*}

561

inserter overly generic

{*}

562

stringbuf ctor inefficient

{*}

563

stringbuf seeking from end

{*}

566

array forms of unformatted input function undefined for zero-element arrays

{*}

567

streambuf inserter and extractor should be unformatted

{*}

574

DR 369 Contradicts Text

{*}

575

the specification of ~shared_ptr is MT-unfriendly, makes implementation assumptions

{*}

576

find_first_of is overconstrained

{*}

577

upper_bound(first, last, ...) cannot return last

{*}

578

purpose of hint to allocator::allocate()

{*}

581

flush() not unformatted function

{*}

586

string inserter not a formatted function

{*}

589

Requirements on iterators of member template functions of containers

{*}

593

__STDC_CONSTANT_MACROS

{*}

595

TR1/C++0x: fabs(complex<T>) redundant / wrongly specified

{*}

596

27.8.1.3 Table 112 omits "a+" and "a+b" modes

{*}

598

Decimal: Conversion to integral should truncate, not round.

{*}

599

Decimal: Say "octets" instead of "bytes."

{*}

600

Decimal: Wrong parameters for wcstod* functions

{*}

601

Decimal: numeric_limits typos

{*}

602

Decimal: "generic floating type" not defined.

{*}

603

Decimal: Trivially simplifying decimal classes.

{*}

604

Decimal: Storing a reference to a facet unsafe.

{*}

605

Decimal: <decfloat.h> doesn't live here anymore.

{*}

607

Concern about short seed vectors

{*}

608

Unclear seed_seq construction details

{*}

609

missing static const

{*}

610

Suggested non-normative note for C++0x

{*}

611

Standard library templates and incomplete types

{*}

612

numeric_limits::is_modulo insufficiently defined

{*}

613

max_digits10 missing from numeric_limits

{*}

616

missing typename in ctype_byname

{*}

618

valarray::cshift() effects on empty array

{*}

619

longjmp wording problem

{*}

620

valid uses of empty valarrays

{*}

621

non-const copy assignment operators of helper arrays

{*}

622

behavior of filebuf dtor and close() on error

{*}

623

pubimbue forbidden to call imbue()

{*}

624

valarray assignment and arrays of unequal length

(./)

625

mixed up Effects and Returns clauses

DONE

STDCXX-272

{*}

628

Inconsistent definition of basic_regex constructor

{*}

629

complex<T> insertion and locale dependence

{*}

634

allocator.address() doesn't work for types overloading operator&`

{*}

638

deque end invalidation during erase

{*}

640

27.6.2.5.2 does not handle (unsigned) long long

{*}

643

Impossible "as if" clauses

{*}

644

Possible typos in 'function' description

{*}

646

const incorrect match_result members

{*}

650

regex_token_iterator and const correctness

{*}

651

Missing preconditions for regex_token_iterator c'tors

{*}

652

regex_iterator and const correctness

{*}

654

Missing IO roundtrip for random number engines

{*}

655

Signature of generate_canonical not useful

{*}

660

Missing Bitwise Operations

{*}

661

New 27.6.1.2.2 changes make special extractions useless

{*}

664

do_unshift for codecvt<char, char, mbstate_t>

{*}

665

do_unshift return value

{*}

666

moneypunct::do_curr_symbol()

{*}

672

Swappable requirements need updating

{*}

673

unique_ptr update

{*}

674

shared_ptr interface changes for consistency with N1856

{*}

677

Weaknesses in seed_seq::randomize [rand.util.seedseq]

{*}

678

Changes for [rand.req.eng]

{*}

679

resize parameter by value

{*}

680

move_iterator operator-> return

{*}

681

Operator functions impossible to compare are defined in [re.submatch.op]

CHECK

{X}

682

basic_regex ctor takes InputIterator or ForwardIterator?

TO DO

{X}

687

shared_ptr conversion constructor not constrained

TO DO

{X}

689

reference_wrapper constructor overly constrained

TO DO

{*}

693

std::bitset::all() missing

CHECK

{*}

694

std::bitset and long long

CHECK

{X}

695

ctype<char>::classic_table() not accessible

TO DO

STDCXX-996

{X}

699

N2111 changes min/max

TO DO

{*}

700

N1856 defines struct identity

CHECK

{i}

703

map::at() need a complexity specification

Editorial

N/A

{*}

705

type-trait decay incompletely specified

CHECK

{X}

706

make_pair() should behave as make_tuple() wrt. reference_wrapper()

TO DO

{X}

712

seed_seq::size no longer useful

TO DO

{*}

715

minmax_element complexity is too lax

{*}

722

Missing [c.math] functions nanf and nanl

{*}

740

Please remove *_ptr<T[N]>

{*}

743

rvalue swap for shared_ptr

{*}

744

What is the lifetime of an exception pointed to by an exception_ptr?

{*}

746

current_exception may fail with bad_alloc

{*}

749

Currently has_nothrow_copy_constructor<T>::value is true if T has 'a' nothrow copy constructor.

{X}

755

std::vector and std:string lack explicit shrink-to-fit operations

TO DO

STDCXX-1000

(./)

759

A reference is not an object

Editorial

{*}

761

unordered_map needs an <tt>at()</tt> member function

{*}

766

Inconsistent exception guarantees between ordered and unordered associative containers

{*}

768

Typos in [atomics]?

{*}

770

std::function should use rvalue swap

{X}

775

Tuple indexing should be unsigned?

TO DO

{*}

777

Atomics Library Issue

(./)

778

std::bitset does not have any constructor taking a string literal

DONE

{*}

781

std::complex should add missing C99 functions

{*}

782

Extended seed_seq constructor is useless

{*}

783

thread::id reuse

{*}

789

xor_combine_engine(result_type) should be explicit

{*}

792

piecewise_constant_distribution is undefined for a range with just one endpoint

{*}

798

Refactoring of binders lead to interface breakage

Legend:

Codes and Descriptions

ICON

STATUS

DESCRIPTION

{i}

Editorial

Either an editorial issue or one that requires no code changes.

(./)

DONE

Change fully implemented and exercised by one or more tests.

{*}

CHECK

Further analysis needed or implementation status unknown.

/!\

INCOMPLETE

Change only partially implemented or not exercised by a test.

{X}

TO DO

Change not implemented yet.

C++IssueStatus (last edited 2009-09-20 23:03:01 by localhost)