Почему эта частная функция шаблона компилируется?-> Ошибка компилятора VS 2009

StackOverflow https://stackoverflow.com/questions/5824819

  •  26-10-2019
  •  | 
  •  

Вопрос

Это компилируется без проблем в VS 2009?Я глупый?GCC выдает предупреждение о том, что шаблон является частным....?Что мне не хватает?

#include <iostream>

using namespace std;

class A
{
private:
    template<typename T>
    A& operator<<(const T & v)
    {
        cout << v << endl;
        return *this;
    }
};

int main()
{
   A a;
   a << 4;
   system("pause");
}
Это было полезно?

Решение

Этот код не должен компилировать - это ошибка (или глупое расширение) по сравнению с Vs. GCC также должен отказаться от этого. Оператор недоступен в прицеле, который используется.

Комо относится к этому правильно:

"ComeauTest.c", line 28: error: function "A::operator<<(const T &) [with T=int]"
          (declared at line 14) is inaccessible
     a << 4;

Изменить: соответствующий стандартный фрагмент, от 13,3/1

Примечание. Функция, выбранная разрешением перегрузки, не гарантированно подходит для контекста. Другие ограничения, такие как доступность функции, могут использовать его в вызывающем контексте плохо сформированным.

Другие советы

Microsoft признает наличие ошибки и заявляет, что она будет исправлена ​​в следующем основном выпуске компилятора (который я прочитал как VC11/VS-whatever-is-after-2010 – возможно, это не пакет обновлений для VC10/VS2010):

Судя по комментариям, исправление уже внесено во внутреннюю сборку компилятора.

Нет, ты не глупый - это сломанный код и должен быть отклонен. Компилятор Comeau (http://www.comeaucomputing.com/tryitout) правильно отвергает это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top