Re[13]: Правильные пацаны юзают правильные касты? :)
От: rg45 СССР  
Дата: 18.01.08 09:42
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

R>>Да нет же! Именно функция! Вот это компилируется без ошибок:

L_L>Я не согласен, и возможно, не прав. Как мне кажется синтаксис — вещь фиксированная. Если есть какая-то конструкция, то выбираться должно однозначно — объявление ли это объекта, или объявление функции. Ты же сам видел, без всех твоих добавленных фокусов с указателями и т.п. — комо что-то говорил про оператор ().

То что, выбираться должно однозначно и не должно возникать ситуации, когда одна и та же конструкция воспринимается то определением переменной-объекта, то объявлением функции — это бесспорно. Но последний мой пример, приведенный здесь
Автор: rg45
Дата: 18.01.08
, однозначно показывает, что при определенных условиях Комо (а также и MSVC) сбиваются и начинают ошибочно трактовать x именно как объявление функции. Иначе выражение: Y* y = x; не скомпилировалось бы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[13]: Правильные пацаны юзают правильные касты? :)
От: Lorenzo_LAMAS  
Дата: 18.01.08 09:42
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

R>>Да нет же! Именно функция! Вот это компилируется без ошибок:

L_L>Я не согласен, и возможно, не прав. Как мне кажется синтаксис — вещь фиксированная. Если есть какая-то конструкция, то выбираться должно однозначно — объявление ли это объекта, или объявление функции. Ты же сам видел, без всех твоих добавленных фокусов с указателями и т.п. — комо что-то говорил про оператор ().

Кстати, надеюсь, это не уведет разговор еще дальше в сторону, но вот еще пример
class X
{
};

template<class T>
class A
{
public:
   A()
   {
      X a(T::foo);
      a = 10;
   }
};


Комо выдает тут ошибку.

"ComeauTest.c", line 12: error: no operator "=" matches these operands
operand types are: X = int
a = 10;
^


т.е. он однозначно (и правильно, по-моему), решил, что это объявление объекта.
А вот на таком коде

class X
{
};

template<class T>
class A
{
public:
   A()
   {
      X a(T::foo);
   }
};

struct XX
{
   typedef int foo;
};

A<XX> a;


он уже стал считать, что X a — это функция в глобальном пространстве имен и заругался на несовместимый тип в повторном объявлении. Надо не полениться и почитать стандарт, конечно. Но я считал (и считаю), что смысл подобного
объявления не должен зависеть от типа, которым инстанцируют шаблон.
Of course, the code must be complete enough to compile and link.
Re[14]: Правильные пацаны юзают правильные касты? :)
От: Lorenzo_LAMAS  
Дата: 18.01.08 09:46
Оценка: 1 (1)
R>То что, выбираться должно однозначно и не должно возникать ситуации, когда одна и та же конструкция воспринимается то определением переменной-объекта, то объявлением функции — это бесспорно.

Ага, в этом мы согласны, уже хорошо. Осталось как-то проверить, правы ли мы (применительно к именно нашему конкретному A x(T::foo) ).

R> Но последний мой пример, приведенный здесь
Автор: rg45
Дата: 18.01.08
, однозначно показывает, что при определенных условиях Комо (а также и MSVC) сбиваются и начинают ошибочно трактовать x именно как объявление функции. Иначе выражение: Y* y = x; не скомпилировалось бы.


Так я не спорю с этим.
Of course, the code must be complete enough to compile and link.
Re[14]: Правильные пацаны юзают правильные касты? :)
От: Lorenzo_LAMAS  
Дата: 18.01.08 09:53
Оценка:
Короче, думаю, баг в комо есть, вот как хорошо ругается г++:

error: dependent-name `T::foo' is parsed as a non-type, but instantiation yields a type


непонятно, чего комо так слошил.
Of course, the code must be complete enough to compile and link.
Re[15]: Правильные пацаны юзают правильные касты? :)
От: rg45 СССР  
Дата: 18.01.08 09:56
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

R>>То что, выбираться должно однозначно и не должно возникать ситуации, когда одна и та же конструкция воспринимается то определением переменной-объекта, то объявлением функции — это бесспорно.


L_L>Ага, в этом мы согласны, уже хорошо. Осталось как-то проверить, правы ли мы (применительно к именно нашему конкретному A x(T::foo) ).

Да даже не заглядывая в стандарт, я знаю точно, что выражение T::foo внутри шаблона, без ключевого слова typename не должно трактоваться как тип, а значит и выражение A x(T::foo) не должно трактоваться как объявление функции. Я эту мысль выражал еще здесь
Автор: rg45
Дата: 17.01.08
, наверное, не достаточно уверенно.

R>> Но последний мой пример, приведенный здесь
Автор: rg45
Дата: 18.01.08
, однозначно показывает, что при определенных условиях Комо (а также и MSVC) сбиваются и начинают ошибочно трактовать x именно как объявление функции. Иначе выражение: Y* y = x; не скомпилировалось бы.


L_L>Так я не спорю с этим.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[15]: Правильные пацаны юзают правильные касты? :)
От: rg45 СССР  
Дата: 18.01.08 10:01
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Короче, думаю, баг в комо есть, вот как хорошо ругается г++:


L_L>

L_L>error: dependent-name `T::foo' is parsed as a non-type, but instantiation yields a type


L_L>непонятно, чего комо так слошил.

Вижуал 2005 тоже лажает, да еще и варнинг выдает недвусмысленный:

warning C4930: 'A x(Ansi::foo)': prototyped function not called (was a variable definition intended?)

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[16]: Правильные пацаны юзают правильные касты? :)
От: Lorenzo_LAMAS  
Дата: 18.01.08 10:01
Оценка:
R>Да даже не заглядывая в стандарт, я знаю точно, что выражение T::foo внутри шаблона, без ключевого слова typename не должно трактоваться как тип, а значит и выражение A x(T::foo) не должно трактоваться как объявление функции. Я эту мысль выражал еще здесь
Автор: rg45
Дата: 17.01.08
, наверное, не достаточно уверенно.


Я ее тоже выразил в ответе Коденку, но потом снес его (ответ мне показался неполиткорректным )
Кстати, думаю, он, когда придумал этот пример вряд ли понял, что именно этот пример значит.

А с компиляторами прям беда.
Of course, the code must be complete enough to compile and link.
Re[17]: Правильные пацаны юзают правильные касты? :)
От: rg45 СССР  
Дата: 18.01.08 10:07
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Кстати, думаю, он, когда придумал этот пример вряд ли понял, что именно этот пример значит.


Тут вариантов ровно два: если он сам его придумал, то, скорее всего, все он понял, но решил провокацию запустить. Второй вариант — пример он от куда-то содрал. Надо у него спросить, как было на самом деле
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[18]: Правильные пацаны юзают правильные касты? :)
От: Lorenzo_LAMAS  
Дата: 18.01.08 10:08
Оценка:
R>Тут вариантов ровно два: если он сам его придумал, то, скорее всего, все он понял, но решил провокацию запустить. Второй вариант — пример он от куда-то содрал. Надо у него спросить, как было на самом деле

Нет, я думаю, он его привел именно чтобы показать, что вот тут функция, вот тут объект.
Of course, the code must be complete enough to compile and link.
Re[17]: Правильные пацаны юзают правильные касты? :)
От: Кодёнок  
Дата: 18.01.08 10:16
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>А с компиляторами прям беда.


И мы все знаем, что дело совсем не в чудовищном невезении С++, из-за которого над компиляторами работают сплошь одни неумехи
Re[18]: Правильные пацаны юзают правильные касты? :)
От: Lorenzo_LAMAS  
Дата: 18.01.08 10:20
Оценка: +1
Кё>И мы все знаем, что дело совсем не в чудовищном невезении С++, из-за которого над компиляторами работают сплошь одни неумехи

Да. Тем более, что над EDG фронт-эндом (который использует комо) работают как раз лучшие из лучших в этом деле
Но, думается мне, если взяться за любой другой популярный язык, можно будет и там найти немало противных косяков.
Ошибаются все
Of course, the code must be complete enough to compile and link.
Re[19]: Правильные пацаны юзают правильные касты? :)
От: Кодёнок  
Дата: 18.01.08 11:26
Оценка: 13 (3) -1 :))) :)
Здравствуйте, Lorenzo_LAMAS, Вы писали:

(Сменил имена — дабы не вводить людей в заблуждение лишний раз)

Задача: объяснить блондинке разницу между двумя строчками. Главный козырь блондинки — вопрос «но почему пишется-то одинаково?»

struct A {
} x[1];
template <A* m> struct B {
  B(int) {}
};
int main()
{
    new A<x>(0);
    new B<x>(0);
}
Re[20]: Правильные пацаны юзают правильные касты? :)
От: Lorenzo_LAMAS  
Дата: 18.01.08 11:36
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Здравствуйте, Lorenzo_LAMAS, Вы писали:


Кё>(Сменил имена — дабы не вводить людей в заблуждение лишний раз)


Кё>Задача: объяснить блондинке разницу между двумя строчками. Главный козырь блондинки — вопрос «но почему пишется-то одинаково?»


Хороший пример.
Of course, the code must be complete enough to compile and link.
Re[20]: Правильные пацаны юзают правильные касты? :)
От: rg45 СССР  
Дата: 18.01.08 12:27
Оценка: +2
Здравствуйте, Кодёнок, Вы писали:

Кё>Здравствуйте, Lorenzo_LAMAS, Вы писали:


Кё>(Сменил имена — дабы не вводить людей в заблуждение лишний раз)


Кё>Задача: объяснить блондинке разницу между двумя строчками. Главный козырь блондинки — вопрос «но почему пишется-то одинаково?»


Кё>
Кё>struct A {
Кё>} x[1];
Кё>template <A* m> struct B {
Кё>  B(int) {}
Кё>};
Кё>int main()
Кё>{
Кё>    new A<x>(0);
Кё>    new B<x>(0);
Кё>}
Кё>


Я сам чуть блондинкой не стал, пока въехал, что тут вообще написано :D
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[21]: Правильные пацаны юзают правильные касты? :)
От: Константин Л. Франция  
Дата: 18.01.08 12:50
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Кодёнок, Вы писали:


Кё>>Здравствуйте, Lorenzo_LAMAS, Вы писали:


Кё>>(Сменил имена — дабы не вводить людей в заблуждение лишний раз)


Кё>>Задача: объяснить блондинке разницу между двумя строчками. Главный козырь блондинки — вопрос «но почему пишется-то одинаково?»


Кё>>
Кё>>struct A {
Кё>>} x[1];
Кё>>template <A* m> struct B {
Кё>>  B(int) {}
Кё>>};
Кё>>int main()
Кё>>{
Кё>>    new A < x > (0);
Кё>>    new B<x>(0);
Кё>>}
Кё>>


R>Я сам чуть блондинкой не стал, пока въехал, что тут вообще написано :D


Созданный по new A как поинтер сранвиваем с x и x с 0?
Re[22]: Правильные пацаны юзают правильные касты? :)
От: rg45 СССР  
Дата: 18.01.08 13:04
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>Здравствуйте, rg45, Вы писали:


R>>Здравствуйте, Кодёнок, Вы писали:


Кё>>>Здравствуйте, Lorenzo_LAMAS, Вы писали:


Кё>>>(Сменил имена — дабы не вводить людей в заблуждение лишний раз)


Кё>>>Задача: объяснить блондинке разницу между двумя строчками. Главный козырь блондинки — вопрос «но почему пишется-то одинаково?»


Кё>>>
Кё>>>struct A {
Кё>>>} x[1];
Кё>>>template <A* m> struct B {
Кё>>>  B(int) {}
Кё>>>};
Кё>>>int main()
Кё>>>{
Кё>>>    new A < x > (0);
Кё>>>    new B<x>(0);
Кё>>>}
Кё>>>


R>>Я сам чуть блондинкой не стал, пока въехал, что тут вообще написано :D


КЛ>Созданный по new A как поинтер сранвиваем с x и x с 0?


Ну почти. Результат сравниения двух указателей, который имеет тип bool, сравниваем с нулем.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[23]: Правильные пацаны юзают правильные касты? :)
От: Константин Л. Франция  
Дата: 18.01.08 17:35
Оценка:
Здравствуйте, rg45, Вы писали:

ну это уже мелочи, тем более я так никогда не пишу из-за неочевидности порядка сравнения
Re[20]: Правильные пацаны юзают правильные касты? :)
От: Left2 Украина  
Дата: 18.01.08 18:34
Оценка: :)
Тебе надо вести колонку "Тёмные углы С++"

Давай ещё!
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re: "Правильные" пацаны пишут "понятный" код :(
От: Erop Россия  
Дата: 18.01.08 18:53
Оценка: 1 (1)
Здравствуйте, oziro, Вы писали:

O>
O>// ...
O>    intrusive_ptr & operator=(intrusive_ptr const & rhs)
O>    {
O>        this_type(rhs).swap(*this); // const_cast ???
O>        return *this;
O>    }
O>


IMHO так ещё и немного недооптимизированно. Нет чтобы так вот написать:
O>    intrusive_ptr & operator=(intrusive_ptr rhs)
    {
        rhs.swap(*this); // const_cast ???
        return *this;
    }
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[20]: Правильные пацаны юзают правильные касты? :)
От: Erop Россия  
Дата: 22.01.08 17:58
Оценка: +1
Здравствуйте, Кодёнок, Вы писали:

Кё>Задача: объяснить блондинке разницу между двумя строчками. Главный козырь блондинки — вопрос «но почему пишется-то одинаково?»


Кё>
Кё>    new A<x>(0);
Кё>


П что тут объяснять?
UB оно UB и есть...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.