Косяк то ли в шаблонах, то ли в std::, то ли в windows.h...

erotic

У меня есть заголовочный файл, в котором определен шаблон некоторого класса, помещенный в namespace Linear. Некоторые функции из этого класса используют функции из неймспейса std, причем не использую using, т.н. все выглядит примерно так:

//Linear.h
#ifndef __LINEAR_H__
#define __LINEAR_H__
#include <cmath>
#include <iostream>
#include <stdarg>
namespace Linear {
template<class T> some_class {
public:
void some_function;
};
template<class T> void some_class :: some_function
{
...
if ( [b]std::min(var1, var2)[/b] )
...
}
};
#endif

Если теперь полученный файл включить в нужный мне cpp файл, а после него <windows.h>, то функции из него компилятся нормально. А вот если включить <windows.h> до файла <Linear.h>, то ничего не компилится и страшно ругается вот такими словами на строчку с std:
error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'

Что это за трабла такая и как с ней бороться?

kamputer

template<class T> inline void some_class<T>::some_function

И ещё где-то в недрах windows.h определён макрос min, из-за этого тоже вроде бы бывают проблемы.

evgen5555

макрос min
Windef.h:
#define min(a,b) a) < (b ? (a) : (b
Типа вся эта бандурина со скобками вставляется за std::, что и вызывает ошибку

okunek

да, можно после включения windows.h вставить две строчки:
#undef min
#undef max

erotic

Точно! Спасибо
Оставить комментарий
Имя или ник:
Комментарий: