static data member
От: gbt Россия  
Дата: 31.07.05 15:53
Оценка:
Hello.

Вычитал в стандарте следующий пункт:

9.4.2.4
If a static data member is of const integral or const enumeration type, its declaration in the class
definition can specify a constant-initializer which shall be an integral constant expression (5.19). In that
case, the member can appear in integral constant expressions. The member shall still be defined in a namespace
scope if it is used in the program and the namespace scope definition shall not contain an initializer.


У меня статический член данных шаблона. То есть написать вот так будет
недостаточно ?
template <typename T>
class A
{
      static int const x = 123;
};


Нужно обязательно явно определять ?
template <typename T>
class A
{
      static int const x = 123;
};

template <typename T>
int const A<T>::x;


Но MSVC 7.1 в режиме MS extensions проглатывает только первый случай, а без —
только второй... Как же все таки правильно ?

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re: static data member
От: Lorenzo_LAMAS  
Дата: 31.07.05 16:07
Оценка:
Вопрос-то, собственно, в чем? Если нужно определение, то нужно определение. Определение будет без инициализатора.
Of course, the code must be complete enough to compile and link.
Re[2]: static data member
От: gbt Россия  
Дата: 31.07.05 16:32
Оценка:
Hello, Lorenzo_LAMAS, you wrote:

> Вопрос-то, собственно, в чем? Если нужно определение, то нужно определение. Определение будет без инициализатора.


Вопроса 2:
1) правильно ли я понял стандарт ?
2) не баг ли это MSVC ?

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re[3]: static data member
От: Lorenzo_LAMAS  
Дата: 31.07.05 16:54
Оценка:
Если статические константы объявлены с инициализатором в классе, то при определении инициализатора быть уже не может.
Of course, the code must be complete enough to compile and link.
Re[4]: static data member
От: gbt Россия  
Дата: 31.07.05 17:12
Оценка:
Hello, Lorenzo_LAMAS, you wrote:

> Если статические константы объявлены с инициализатором в классе, то при

> определении инициализатора быть уже не может.

Но само определение обязательно должно присутствовать ?
Или объявления может быть достаточно ?

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re[5]: static data member
От: Lorenzo_LAMAS  
Дата: 31.07.05 17:14
Оценка:

The member shall still be defined in a namespace
scope if it is used in the program

Of course, the code must be complete enough to compile and link.
Re[6]: static data member
От: Lorenzo_LAMAS  
Дата: 31.07.05 17:17
Оценка:
+

3.2/2
An expression is potentially evaluated unless it appears where an integral constant expression is required
(see 5.19), is the operand of the sizeof operator (5.3.3), or is the operand of the typeid operator and
the expression does not designate an lvalue of polymorphic class type (5.2.8). An object or non-overloaded
function is used if its name appears in a potentially-evaluated expression.

Of course, the code must be complete enough to compile and link.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.