Visual C++ 2015'in burada bir hata olduğundan eminim, ancak% 100 emin değilim.Dize değişmez birleştirme için doğru davranış (çeviri C++ 11 aşama 6)
Kodu: ++ g ile
// Encoding: UTF-8 with BOM (required by Visual C++).
#include <stdlib.h>
auto main()
-> int
{
auto const s = L""
" is not in the Unicode BMP!";
return s[0] > 256? EXIT_SUCCESS : EXIT_FAILURE;
}
Sonuç: Visual C++ ile
[H:\scratchpad\simple_text_io] > g++ --version | find "++" g++ (i686-win32-dwarf-rev1, Built by MinGW-W64 project) 6.2.0 [H:\scratchpad\simple_text_io] > g++ compiler_bug_demo.cpp [H:\scratchpad\simple_text_io] > run a Process exit code = 0. [H:\scratchpad\simple_text_io] > _
Sonuç:
[H:\scratchpad\simple_text_io] > cl /nologo- 2>&1 | find "++" Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x86 [H:\scratchpad\simple_text_io] > cl compiler_bug_demo.cpp /Feb compiler_bug_demo.cpp compiler_bug_demo.cpp(8): warning C4566: character represented by universal-character-name '\U00010437' cannot be represented in the current code page (1252) [H:\scratchpad\simple_text_io] > run b Process exit code = 1. [H:\scratchpad\simple_text_io] > _herhangi UB katılan var mı, ve değilse, derleyici doğru davranacağı ?
Zeyilname: bunun bir önemi görünmüyor böylece , BMP içinde olduğunu
küçük Yunan PI kullanırsanız davranış hem derleyiciler için değişmez, π ” “. [lex.string] kaynaktan
"VC++ yanlıştır çünkü §2.14.5, madde 13" derken, karakter kümesini çevreleyen kurallar beni şaşırtıyor. – molbdnilo
VS 2015 güncelleştirmesi 3 ('Microsoft (R) C/C++ Derleyici Sürüm 19.00.24213.1 x86' için en iyi duruma getirme) bunu hiçbir hata veya uyarı olmadan derler; Dosyayı Emacs'de "utf-8-unix" kodlama sisteminde kaydettim. VS'nin hangi sürümüne sahipsin? – legends2k
@ legends2k: Sorudaki örnek, sürümü listeler. –