Статистические c переменные-члены шаблонов определены или специализированы? - PullRequest
0 голосов
/ 05 мая 2020

Это относится к следующему вопросу: различия constexpr между G CC и clang

В следующем sp inet последняя строка является специализацией, определением или оба?

template<typename T>
struct A {
  static const T s;
};

template<typename T>
const T A<T>::s = T(1);

Мне это кажется определением, но опубликованный вопрос, успешно скомпилированный g cc, заставляет меня сомневаться в своих предположениях.

1 Ответ

2 голосов
/ 05 мая 2020

Это определение.

Следующее будет специализацией.

template <>
const int A<int>::s = 20;

Учитывая следующую программу,

#include <iostream>

template<typename T>
struct A {
  static const T s;
};

template <typename T>
const T A<T>::s = T(1);

template <>
const int A<int>::s = 20;

int main()
{
   double a = A<double>::s;
   double b = A<int>::s;

   std::cout << "a: " << a << std::endl;
   std::cout << "b: " << b << std::endl;
}

Вы должны ожидать, что результат будет:

a: 1
b: 20

Смотрите, как работает https://ideone.com/t7Hxk9

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...