Всем привет.
Волею случая пришлось писать для не-windows.
В моём случае это оказался:
ASPLinux release 7.1 (Mriya)
Kernel 2.4.2-0.1.49 on an i686
взял и написал для проверки небольшую программку:
#include <stdio.h>
#include <string>
int main (int, char**)
{
std::basic_string <wchar_t> wstr (L"linux");
printf ("%S\n", wstr. c_str ());
return 0;
}
Попробовал собрать (
gcc ww.cpp). Получил:
/usr/include/g++-3/std/bastring.h: In method `const charT
*basic_string<charT, traits, Allocator>::c_str () const [with charT =
__wchar_t, traits = string_char_traits<__wchar_t>, Allocator =
__default_alloc_template<true, 0>]':
ww.cpp:7: instantiated from here
/usr/include/g++-3/std/bastring.h:343: cannot convert `const char *' to
`const __wchar_t *' in return
стал смотреть. и нашёл в /usr/include/g++-3/std/bastring.h вот что:
// Main templates for the -*- C++ -*- string classes.
// Copyright (C) 1994, 1995, 1999 Free Software Foundation
<skip>
// Written by Jason Merrill based upon the specification by Takanori Adachi
// in ANSI X3J16/94-0013R2.
<skip>
{ if (length () == 0) return ""; terminate (); return data (); }
^^^^^^^^^^
вот этот ретурн всегда возвращает char* а мне нужно wchar_t*.
В связи с этим вопросы:
1) может где есть более правильный вариант STL?
2) если я возьму другой вариант STL — можно им заменить этот?
3) или мне самому нужно поправить эту ошибку (вроде как можно, код-то открытый).
4) в linux всё такое самодельное?
Или я чего-то не понимаю и в linux'e всё не так к в windows. может какой ключ компилятора нужно установить (я никаких не задавал).