[1.49][filesystem] problem while instantiating a global bfs::path variable

Hello, using a global path variable as in the following sample is no longer possible when using 1.49 under Windows: #include <iostream> #include <boost/filesystem.hpp> boost::filesystem::path global_path("."); int main() { std::cout << global_path << std::endl; return 0; } The program crashes while starting. The following backtrace was captured:
msvcp100d.dll!std::codecvt<wchar_t,char,int>::in(int & _State=0, const char * _First1=0x00000000002af760, const char * _Last1=0x00000000002af761, const char * & _Mid1=0x0000000000000000, wchar_t * _First2=0x00000000002af460, wchar_t * _Last2=0x00000000002af660, wchar_t * & _Mid2=0x0000000000000000) Line 1521 + 0x5 bytes C++ global_path.exe!`anonymous namespace'::convert_aux(const char * from=0x00000000002af760, const char * from_end=0x00000000002af761, wchar_t * to=0x00000000002af460, wchar_t * to_end=0x00000000002af660, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & target="", const std::codecvt<wchar_t,char,int> & cvt={...}) Line 84 + 0x5a bytes C++ global_path.exe!boost::filesystem3::path_traits::convert(const char * from=0x00000000002af760, const char * from_end=0x00000000002af761, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & to="", const std::codecvt<wchar_t,char,int> & cvt={...}) Line 167 C++ global_path.exe!boost::filesystem3::path_traits::dispatch<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & c=".", std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & to="", const std::codecvt<wchar_t,char,int> & cvt={...}) Line 174 + 0x9e bytes C++ global_path.exe!boost::filesystem3::path::path<char const [2]>(const char [2]& source=0x000000013fa435d4, void * __formal=0x0000000000000000) Line 135 + 0x2d bytes C++ global_path.exe!`dynamic initializer for 'global_path''() Line 4 + 0x1a bytes C++ msvcr100d.dll!_initterm(void (void)* * pfbegin=0x000000013fa433d0, void (void)* * pfend=0x000000013fa43418) Line 873 C global_path.exe!__tmainCRTStartup() Line 474 C global_path.exe!mainCRTStartup() Line 371 C kernel32.dll!000000007695652d() [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] ntdll.dll!0000000076dec521()
The program was built using boost 1.49 under Windows 7 and MSVC 10. The same sample works as expected using Boost 1.48 while keeping the rest untouched. Thanks for clarification, Jan.

On 16/05/2012 15:56, Jan Boehme wrote:
Hello,
using a global path variable as in the following sample is no longer possible when using 1.49 under Windows:
#include<iostream> #include<boost/filesystem.hpp>
boost::filesystem::path global_path(".");
int main() { std::cout<< global_path<< std::endl; return 0; }
The program crashes while starting. The following backtrace was captured:
msvcp100d.dll!std::codecvt<wchar_t,char,int>::in(int& _State=0, const char * _First1=0x00000000002af760, const char * _Last1=0x00000000002af761, const char *& _Mid1=0x0000000000000000, wchar_t * _First2=0x00000000002af460, wchar_t * _Last2=0x00000000002af660, wchar_t *& _Mid2=0x0000000000000000) Line 1521 + 0x5 bytes C++ global_path.exe!`anonymous namespace'::convert_aux(const char * from=0x00000000002af760, const char * from_end=0x00000000002af761, wchar_t * to=0x00000000002af460, wchar_t * to_end=0x00000000002af660, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & target="", const std::codecvt<wchar_t,char,int> & cvt={...}) Line 84 + 0x5a bytes C++ global_path.exe!boost::filesystem3::path_traits::convert(const char * from=0x00000000002af760, const char * from_end=0x00000000002af761, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & to="", const std::codecvt<wchar_t,char,int> & cvt={...}) Line 167 C++ global_path.exe!boost::filesystem3::path_traits::dispatch<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & c=".", std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & to="", const std::codecvt<wchar_t,char,int> & cvt={...}) Line 174 + 0x9e bytes C++ global_path.exe!boost::filesystem3::path::path<char const [2]>(const char [2]& source=0x000000013fa435d4, void * __formal=0x0000000000000000) Line 135 + 0x2d bytes C++ global_path.exe!`dynamic initializer for 'global_path''() Line 4 + 0x1a bytes C++ msvcr100d.dll!_initterm(void (void)* * pfbegin=0x000000013fa433d0, void (void)* * pfend=0x000000013fa43418) Line 873 C global_path.exe!__tmainCRTStartup() Line 474 C global_path.exe!mainCRTStartup() Line 371 C kernel32.dll!000000007695652d() [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] ntdll.dll!0000000076dec521()
The program was built using boost 1.49 under Windows 7 and MSVC 10. The same sample works as expected using Boost 1.48 while keeping the rest untouched.
Thanks for clarification, Jan.
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
This has already been reported as a bug: https://svn.boost.org/trac/boost/ticket/6638 All the best, Fraser.

On 05/17/2012 08:26 PM, Fraser Hutchison wrote:
On 16/05/2012 15:56, Jan Boehme wrote:
Hello,
using a global path variable as in the following sample is no longer possible when using 1.49 under Windows:
The program was built using boost 1.49 under Windows 7 and MSVC 10. The same sample works as expected using Boost 1.48 while keeping the rest untouched.
Thanks for clarification, Jan.
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
This has already been reported as a bug: https://svn.boost.org/trac/boost/ticket/6638
All the best, Fraser.
Thank you very much, Jan.
participants (2)
-
Fraser Hutchison
-
Jan Boehme