コンテナーのサイズが max_size より大きい場合の状況について、どの標準が述べていますか?
UB、std::bad_alloc などですか?
MSVC は例外をスローします。
「コンテナを押し込もうとするとどうなるのmax_size?」という意味だと思います。コンテナsizeはを超えることができないためmax_sizeです。含まれている場合はmax_size、誤った値を返しました。
正確に何が起こるかは、コンテナと、コンテナのサイズを変更しようとしている操作によって異なりますが、ほとんどのサイズ変更可能なコンテナ(つまりstring、vector)の場合、標準ではalength_errorをスローする必要があります。
標準では、std::length_errorほとんどの場合に a をスローする必要がありますが、アロケーターが別の例外をスローする場合もあります。
C++03 §21.3/4a (クラス テンプレートbasic_string) から:
任意の文字列操作で、操作の結果が
size()を超えるmax_size()場合、操作は をスローしlength_errorます。
§21.3.3/10-12 (basic_string容量):
void reserve(size_type res_arg=0);
[...]
スロー:length_errorifres_arg > max_size(). 218)218)適切な例外をスローする可能性のある
reserve()使用。Allocator::allocate()
§23.2.4.2/2-4 (vector容量):
void reserve(size_type n)
[...]
スロー:length_errorifn > max_size(). 248248)適切な例外をスローする可能性のある
reserve()使用。Allocator::allocate()
標準では、他の標準コンテナー ( deque、list、priority_queue、map、multimap、set、multisetおよびbitset) については明示的に言及していません。ただし、表 65 (コンテナーの要件) ではmax_size、「size()可能な限り最大のコンテナー」と記載されています。