Il seguente programma di test restituisce risultati diversi a seconda che io stia utilizzando libC++ o libstdC++.Differenza nel comportamento stringstream per il tipo void * utilizzando libC++ e libstdC++
#include <sstream>
#include <iostream>
int main()
{
int a = 0;
void* optr = &a;
void* iptr;
std::stringstream ss;
ss << optr;
std::cout << ss.str() << '\n';
ss >> iptr;
std::cout << iptr << '\n';
return 0;
}
Sto utilizzando la seguente versione di clang da Xcode 5 su OSX 10.9.2
$ xcrun clang++ --version
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix
ecco l'output del test, quando costruito con libstdC++ e libC++
$ xcrun clang++ test.cpp <-- libstdc++ version
$ ./a.out
0x7fff5ec723e8
0x7fff5ec723e8
$ xcrun clang++ test.cpp -stdlib=libc++ <-- libc++ version
$ ./a.out
0x7fff5205125c
0x7fff5
Si tratta di un bug nell'implementazione di libC++ di stringstream? Questo uso di void * con stringstream C++ valido?
Grazie!
[locale.num.get] sembra essere la sezione standard specificare questo. Sembra dire che 'ss >> iptr' dovrebbe comportarsi come' sscanf' con '% p', ma AFAICS in realtà non lo specifica. La descrizione "Stage 3" sembra coprire i tipi integrale e float, ma trascura 'void *'. 'Sscanf (ss.str(). C_str(),"% p ", &iptr);' funziona? –
@MattMcNabb: ho appena testato con clang-503.0.38 (basato su LLVM 3.4svn) e 'sscanf (ss. str(). c_str(), "% p", &iptr); 'funziona davvero per me – Cornstalks