Или, например, к тому, что sizeof(char) не всегда 1?
Как стандарт языка ни меняй, порядок байтов архитектур от этого не изменится...
И уже пожинают плоды. Тут опубликовали, что продажи виндов и линя выросли, а юниха — на прежнем уровне или слегка упали.
Или, например, к тому, что sizeof(char) не всегда 1?
Как стандарт языка ни меняй, порядок байтов архитектур от этого не изменится...
Или мы пишем только то, что явно оговорено в стандарте, или переносимости у нас не будет вообще ни на каком языке. Вспомним пресловутый (i++ + i++) ?
Или мы пишем только то, что явно оговорено в стандарте, или переносимости у нас не будет вообще ни на каком языке. Вспомним пресловутый (i++ + i++) ? 
В стандарте явно оговорено, что результат в этом случае не определён
Или мы пишем только то, что явно оговорено в стандарте, или переносимости у нас не будет вообще ни на каком языке. Вспомним пресловутый (i++ + i++) ? 
Начиная с того, что длина имени переменной не определена в стандарте, а сказано, что длина имени переменно должна быть достаточна. Т.е., в приципе, можно сделать 1 символ.
По твоей методе выходит, что переменными пользоватьс нельзя.

Зато позволяют решать более широкий спектр задач 

Но как это в "GPL-кабалу загоняет" - всё равно не раскрыто 

Другое дело, что код, о котором я говорил, был достаточно хитрым, и я сейчас его не воспроизведу. Т.е. запутаться компилятору там, в общем-то, было где
4.10 Pointer conversions [conv.ptr]
1 A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to zero. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable from every other value of pointer to object or pointer to function type. Two null pointer values of the same type shall compare equal. The conversion of a null pointer constant to a pointer to cv-qualified type is a single conversion, and not the sequence of a pointer conversion followed by a qualification conversion (4.4).
2 An rvalue of type “pointer to cv T,” where T is an object type, can be converted to an rvalue of type “pointer to cv void.” The result of converting a “pointer to cv T” to a “pointer to cv void” points to the start of the storage location where the object of type T resides, as if the object is a most derived object (1.8) of type T (that is, not a base class subobject).
3 An rvalue of type “pointer to cv D,” where D is a class type, can be converted to an rvalue of type “pointer to cv B,” where B is a base class (clause 10) of D. If B is an inaccessible (clause 11) or ambiguous (10.2) base class of D, a program that necessitates this conversion is ill-formed. The result of the conversion is a pointer to the base class sub-object of the derived class object. The null pointer value is converted to the null pointer value of the destination type.
62
Licensed to /Mikhail Evstiounin
ANSI Store order #X221533 Downloaded: 11/29/2005 8:24:54 AM ET
Single user license only. Copying and networking prohibited
5.2.9 Static cast [expr.static.cast]
1 The result of the expression static_cast<T>(v) is the result of converting the expression v to type T. If T is a reference type, the result is an lvalue; otherwise, the result is an rvalue. Types shall not be defined in a static_cast. The static_cast operator shall not cast away constness (5.2.11).
2 An expression e can be explicitly converted to a type T using a static_cast of the form
static_cast<T>(e) if the declaration “T t(e);” is well-formed, for some invented temporary variable
t (8.5). The effect of such an explicit conversion is the same as performing the declaration and initialization and then using the temporary variable as the result of the conversion. The result is an lvalue if T is a reference type (8.3.2), and an rvalue otherwise. The expression e is used as an lvalue if and only if the initialization uses it as an lvalue.
3 Otherwise, the static_cast shall perform one of the conversions listed below. No other conversion
shall be performed explicitly using a static_cast.
4 Any expression can be explicitly converted to type “cv void.” The expression value is discarded. [Note: however, if the value is in a temporary variable (12.2), the destructor for that variable is not executed until the usual time, and the value of the variable is preserved for the purpose of executing the destructor. ] The lvalue-to-rvalue (4.1), array-to-pointer (4.2), and function-to-pointer (4.3) standard conversions are not applied to the expression.
5 An lvalue of type “cv1 B”, where B is a class type, can be cast to type “reference to cv2 D”, where D is a class derived (clause 10) from B, if a valid standard conversion from “pointer to D” to “pointer to B” exists (4.10), cv2 is the same cv-qualification as, or greater cv-qualification than, cv1, and B is not a virtual base class of D. The result is an lvalue of type “cv2 D.” If the lvalue of type “cv1 B” is actually a sub-object of an object of type D, the lvalue refers to the enclosing object of type D. Otherwise, the result of the cast is undefined. [Example:
struct B {};
struct D : public B {};
D d;
B &br = d;
static_cast<D&>(br); // produces lvalue to the original d object
—end example]
6 The inverse of any standard conversion sequence (clause 4), other than the lvalue-to-rvalue (4.1), array-topointer (4.2), function-to-pointer (4.3), and boolean (4.12) conversions, can be performed explicitly using static_cast. The lvalue-to-rvalue (4.1), array-to-pointer (4.2), and function-to-pointer (4.3) conversions are applied to the operand. Such a static_cast is subject to the restriction that the explicit conversion does not cast away constness (5.2.11), and the following additional rules for specific cases:
74
Licensed to /Mikhail Evstiounin
ANSI Store order #X221533 Downloaded: 11/29/2005 8:24:54 AM ET
Single user license only. Copying and networking prohibited.
ISO/IEC ISO/IEC 14882:2003(E)
5 Expressions 5.2.9 Static cast
7 A value of integral or enumeration type can be explicitly converted to an enumeration type. The value is unchanged if the original value is within the range of the enumeration values (7.2). Otherwise, the resulting enumeration value is unspecified.
8 An rvalue of type “pointer to cv1 B”, where B is a class type, can be converted to an rvalue of type “pointer to cv2 D”, where D is a class derived (clause 10) from B, if a valid standard conversion from “pointer to D” to “pointer to B” exists (4.10), cv2 is the same cv-qualification as, or greater cv-qualification than, cv1, and B is not a virtual base class of D. The null pointer value (4.10) is converted to the null pointer value of the destination type. If the rvalue of type “pointer to cv1 B” points to a B that is actually a sub-object of an object of type D, the resulting pointer points to the enclosing object of type D. Otherwise, the result of the
cast is undefined.
9 An rvalue of type “pointer to member of D of type cv1 T” can be converted to an rvalue of type “pointer to member of B of type cv2 T”, where B is a base class (clause 10) of D, if a valid standard conversion from “pointer to member of B of type T” to “pointer to member of D of type T” exists (4.11), and cv2 is the same cv-qualification as, or greater cv-qualification than, cv1.63) The null member pointer value (4.11) is converted to the null member pointer value of the destination type. If class B contains the original member, or is a base or derived class of the class containing the original member, the resulting pointer to member points to the original member. Otherwise, the result of the cast is undefined. [Note: although class B need not contain the original member, the dynamic type of the object on which the pointer to member is dereferenced
must contain the original member; see 5.5. ]
10 An rvalue of type “pointer to cv1 void” can be converted to an rvalue of type “pointer to cv2 T,” where T is an object type and cv2 is the same cv-qualification as, or greater cv-qualification than, cv1. A value of type pointer to object converted to “pointer to cv void” and back to the original pointer type will have its original value.
Но он же nightmare для компиляторщиков. И не только синтаксически — это из С пришло, но и семантически. Более того, правила поиска приведения видов (то, что обсуждается здесь) оно примерно из 38 пунктов (или около того, ЕМНИП), если всё свести вместе.
Но как это в "GPL-кабалу загоняет" - всё равно не раскрыто 
Либо можно послать пользователей нафиг и спокойно делать дальше то, что через годик может оказаться бесполезным - сама среда Линукс ( компиляторы, другие библиотеки ) тоже за это время на месте не стояли. Просто байт-кодовые языки дают бОльшую стабильность.
