読者です 読者をやめる 読者になる 読者になる

std::map.operator[] に std::map.size() を代入した時の挙動が怖い

助けてください > 闇の軍団の方々

問題のコード

#include <iostream>
#include <map>

int main() {
    std::map<int, int> dict;
    dict[123] = dict.size();
    std::cout << "result: " << dict[123] << std::endl;
}

実行結果

/Users/arosh/clang clang++ -v
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin11.4.2
Thread model: posix

/Users/arosh/clang g++ -v
Using built-in specs.
Target: i686-apple-darwin11
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.11~148/src/configure --disable-checking --enable-werror --prefix=/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.11~148/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

/Users/arosh/clang clang++ -Wall -Wextra map_size.cpp  
/Users/arosh/clang ./a.out 
result: 0

/Users/arosh/clang g++ -Wall -Wextra map_size.cpp 
/Users/arosh/clang ./a.out 
result: 1

いろいろ教えてもらいました