C ++ Явная специализация не работает правильно VS Studio - PullRequest
0 голосов
/ 09 мая 2018

Я работаю в Visual Studio 2017 и заметил ошибку при компиляции

template<class T>T add(T a, T b)
{
    return a + b;
};

template<> Line add<Line, Point>(Line line, Point point) /*E0493 there are 
no instances of the "add" function pattern corresponding to the specified  
type*/ 
{
    Line newline;
    newline.start = add(point, line.start);
    newline.end = add(point, line.end);
    return newline;
}
template<> Point add<Point, Point>(Point a, Point b)//here is the same
{
    Point res;
    res.x = a.x + b.x;
    res.y = a.y + b.y;
    return res;
}

Я пытался стереть "template <>" до того, как 2-я и 3-я реализации функции add () и кода работали нормально. Но я хочу понять, почему этот код не работает в моей VS Studio 2017.

1 Ответ

0 голосов
/ 09 мая 2018

Правильный синтаксис для специализации шаблона функции будет

template<> Point add(Point a, Point b) { ... }

Однако add(Line, Point) не может быть специализацией основного шаблона template<class T> T add(T a, T b), так как последний ожидает два параметра одного типа.

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