Привет всем.
VS2015 Upd3
Удалил из определения класса объявление шаблонного метода. Сама реализация этого метода осталась (за пределами class{}). То есть, код выглядит как-то так:
class TT
{
};
//компилируется без проблем
template<typename Q>
void TT::MM(Q x)
{
}
//Error C2039 'MM1': is not a member of 'TT'
//void TT::MM1()
//{
//}
int main()
{
TT x;
//Error C2039 'MM': is not a member of 'TT'
//x.MM(1);
return 0;
}
А оно взяло и скомпилировалось без ошибок. Хотя, по идее, должно выругаться на реализацию TT::MM так же, как и на TT::MM1.
Вопрос — это какие-то новые/старые фичи C++ или бага компилятора?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Привет всем.
КД>VS2015 Upd3
Повозился еще немного. Компилируется (и даже работает) такой код:
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class TT
{
public:
void AA();
};
template<typename Q>
void TT::MM(Q x)
{
cout<<x<<endl;
}
void TT::AA()
{
int x=1;
MM(x);
}//AA
int main()
{
TT x;
//Error C2039 'MM': is not a member of 'TT'
//x.MM(1);
//
//int r=1;
//
//x.MM(r);
x.AA();
return 0;
}
Попробовал этот код на VS2008. Получил ожидаемую ошибку компиляции:
1>d:\users\dima\temp\2016_09_26__cpp_test_vs2008\console\console\console.cpp(16) : error C2039: MM: не является членом "TT"
1> d:\users\dima\temp\2016_09_26__cpp_test_vs2008\console\console\console.cpp(10): см. объявление 'TT'
Что-то меня это напрягло ...
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>VS2015 Upd3
КД>Удалил из определения класса объявление шаблонного метода. Сама реализация этого метода осталась (за пределами class{}). То есть, код выглядит как-то так:
КД>А оно взяло и скомпилировалось без ошибок. Хотя, по идее, должно выругаться на реализацию TT::MM так же, как и на TT::MM1.
КД>Вопрос — это какие-то новые/старые фичи C++ или бага компилятора?
Опять нарвался, выругался,
написал в connect.
Ответили, что бага порождена в VS2013 и исправлена в VS2017.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --