std::basic_string <wchar_t>
От: Аноним  
Дата: 27.11.03 12:23
Оценка:
Всем привет.

Волею случая пришлось писать для не-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. может какой ключ компилятора нужно установить (я никаких не задавал).
Re: std::basic_string <wchar_t>
От: abbr  
Дата: 27.11.03 13:48
Оценка:
Здравствуйте, Аноним, Вы писали:

Старый баг

gcc changelog:

147: 1999-01-28 Baron Roberts <baron@sgi.com>
148:
149: * string: Uncomment wstring declaration.
150:
151: * std/straits.h: Remove #if 0/#endif from around
152: struct string_char_traits <wchar_t>.
153: #include <cwchar>.
154: Add missing definition for wchar_t move method.
155: Add empty() method for trait-based empty string return.
156:
157: * std/bastring.h (c_str): Change return of "" to return of
158: traits::empty() call so that proper empty string is returned
159: based on the character type (i.e. "" or L"").

Обнови компилятор.
Re[2]: Обновление компилятора (было: std::basic_string <wcha
От: McQwerty Россия  
Дата: 27.11.03 14:48
Оценка:
Здравствуйте, abbr, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


A>Старый баг


A>gcc changelog:


A>147: 1999-01-28 Baron Roberts <baron@sgi.com>

ага. с этим понятно... спасибо.

A>Обнови компилятор.

кхм... я, к сожалению, не знаком с linux'ом.
как это правильно сделать.
где нужно брать последний правильный компилятор?

заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.