[VS2015] вопрос про шаблонные методы класса
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 26.09.16 16:32
Оценка: 46 (3)
Привет всем.

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++ или бага компилятора?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: [VS2015] вопрос про шаблонные методы класса
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 26.09.16 16:54
Оценка: 8 (2)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Привет всем.


КД>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'


Что-то меня это напрягло ...
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: [VS2015] вопрос про шаблонные методы класса
От: uzhas Ниоткуда  
Дата: 26.09.16 17:43
Оценка: +1
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Вопрос — это какие-то новые/старые фичи C++ или бага компилятора?


скорее бага, про такие "новые фишки" не слышал
Re: [VS2015] вопрос про шаблонные методы класса
От: SaZ  
Дата: 27.09.16 07:44
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Привет всем.


КД>...

КД>Вопрос — это какие-то новые/старые фичи C++ или бага компилятора?

Студия не компилирует шаблонные функции, если к ним нет обращения. Поставьте себе clang tools для вижлы.
Re: [VS2015] вопрос про шаблонные методы класса
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 11.02.17 04:53
Оценка: 14 (2)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>VS2015 Upd3


КД>Удалил из определения класса объявление шаблонного метода. Сама реализация этого метода осталась (за пределами class{}). То есть, код выглядит как-то так:


КД>А оно взяло и скомпилировалось без ошибок. Хотя, по идее, должно выругаться на реализацию TT::MM так же, как и на TT::MM1.


КД>Вопрос — это какие-то новые/старые фичи C++ или бага компилятора?


Опять нарвался, выругался, написал в connect.

Ответили, что бага порождена в VS2013 и исправлена в VS2017.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.