Здравствуйте UgN, Вы писали:
UgN> D>>inline писать писать нельзя.
UgN>Почему? Компиляется VS6 на ура...
По-тому что inline нельзя указывать при объявлении в локальной области, в которой не может быть описание этой функции. А что до VS6 то это не пример поробуй здесь http://www.comeaucomputing.com/tryitout/.
Здравствуйте Xentrax, Вы писали:
X>И финальный вариант
Хм. А че так напрягаться. Взял бы да просто скопировал всю таблицу ключевых слов в окошко, да написал рядом "Вив ля Франс! 63 подряд! Кто больше?!"
Здравствуйте Андрей Тарасевич, Вы писали:
АТ>Остроумно, но тем не менее согласно тому, что я вынес для себя из одной из дискуссий в comp.lang.c++, alternative tokens не являются ключевыми словами.
насколько я понял из Стандарта, они не являются ключевыми словами по крайней мере по двум причинам:
1) они не перечислены в таблице ключевых слов С++
2) они являются тем же самым, что обозначают, т.е. скобками, операторами и т.п, которые, в свою очередь, не являются ключевыми словами.
Здравствуйте Kaa, Вы писали:
Kaa>Хм. А че так напрягаться. Взял бы да просто скопировал всю таблицу ключевых слов в окошко, да написал рядом "Вив ля Франс! 63 подряд! Кто больше?!"
Не соберется
Кстати, я не совсем понимаю, что значит typedef в этом коде...
UgN>C++ — это прикол от Страуструпа, который даже и представить не мог, что современные программисты будут пытаться использовать язык, допускающий употребление 10 различных ключевых слов подряд...
Но 10 ключевых слов пока не удалось никому написать
Хе-хе, а кто-то говорил, что нужно инстанцировать?
В модной книжке Modern C++ Design, которую я сейчас читаю, на этом трюке построено несколько интересных вещей.
Ну а уж если инстанцировать, то тогда больше 10-и не получилось
class AAA{
template < int > int g()
{
if (true);
else do typedef operator typename volatile const signed short int ();
while (1);
}
int ggg()
{g<1>();
}
};
X>class AAA{
X> template < int > int g()
X> {
X> if (true);
X> else do typedef operator typename volatile const signed short int ();
X> while (1); <...>
Если не создавать объектов то да — можно писать туфт, но ведь она НЕРАБОТАЕТ и спрашивается какие можно интересные штуки делать на том что в принципе работать не будет
Разве что плодить и размножать ошибки
Здравствуйте Klestov, Вы писали:
K>Если не создавать объектов то да — можно писать туфт, но ведь она НЕРАБОТАЕТ и спрашивается какие можно интересные штуки делать на том что в принципе работать не будет
Туфту (как в моем варианте без инстанцирования) конечно не нужно писать. В принципе, как уже было сказано, то, что обсуждается в данной теме в реальном коде быть не должно.
Но от инстанцирования только при необходимости есть иногда и польза.
Функция SwitchPrototype не будет компилироваться до тех пор, пока ее не вызовет пользователь. То есть если в используемом нами варианте CreationPolicy нет функций GetPrototype и SetPrototype, то компилятор ни слова не скажет, хотя SwitchPrototype их и вызывает.
Здравствуйте Xentrax, Вы писали:
X>Функция SwitchPrototype не будет компилироваться до тех пор, пока ее не вызовет пользователь. То есть если в используемом нами варианте CreationPolicy нет функций GetPrototype и SetPrototype, то компилятор ни слова не скажет, хотя SwitchPrototype их и вызывает.
Внесу небольшую ясность. Код внутри шаблонов должен быть синтаксически корректным в любом случае, в случае если он настраивается, то еще и семантически корректным. По Стандарту разрешено не выдавать ошибки о синтаксических проблемах в шаблонах до момента настройки, но от этого программа содержащая синтксические ошибки в не настраиваемых шаблонах коррктной не становится.
MS Visual C++, которым здесь большинство пользуется не почти не проверяет синтаксис не настроенных шаблонов функций, поэтому ошибки и не выдаются до момента настройки.
Здравствуйте Xentrax, Вы писали:
X>Функция SwitchPrototype не будет компилироваться до тех пор, пока ее не вызовет пользователь. То есть если в используемом нами варианте CreationPolicy нет функций GetPrototype и SetPrototype, то компилятор ни слова не скажет, хотя SwitchPrototype их и вызывает.
Это не показательно. Однажды, в каком-то файле, будут объявлены (даже не обязательно реализованы) эти функции GetPrototype/SetPrototype, а также будет использована SwitchPrototype.
Фишка в том, что шаблоны позволяют много вольностей с сигнатурами функций — лишь бы число явных (!) параметров было тем же самым. И это правильно.
А поскольку "слабое объявление функции" языком и здравым смыслом не предусмотрено, то отложенная проверка разрешена.
Аналог этого — неявное объявление функций в голом Си.
//////////////////////
// main.c
// никаких #include <stdio.h>int main()
{
printf("hello\n"); // Компилятор полагает, что '_printf' - это функция
// с прототипом extern "C" int cdecl func(...);
printf(); // Сожрет, слинкует и бабахнет при исполнении.
printf(12345); // поэтому лучше все-таки объявить ( включить <stdio.h> )
}
// конец файла main.c
//////////////////////
Перекуём баги на фичи!
Re[7]: Не оверквоть!
От:
Аноним
Дата:
14.11.02 08:41
Оценка:
Здравствуйте Klestov, Вы писали:
K>Здравствуйте Klestov, Вы писали:
K>>Здравствуйте UgN, Вы писали:
UgN>>>Здравствуйте dupamid, Вы писали:
UgN>>> D>>>>inline писать писать нельзя.
UgN>>>Почему? Компиляется VS6 на ура...
UgN>>>It's compiled? First screen shows? Let's sell it!
UgN>>>А что до смысла -- так я скорее застрелюсь чем в своей программе ТАКОЕ напишу.
UgN>>>
K>>Я тоже.
K>Но inline по хорошему писать нельзя. То что его понимает VC так это его проблемы — он стандарта не придерживается в отличии от C++Builder
Это завист от версии. VC7.1 лучше соответвует стандарту, чем C++Builder6 и вряд ли это изменится в будущем.