Компилятор VS2010 определить

в gcc я пишу friend class FriendMaker<T>::Type но Visual Studio хочет friend FriendMaker<T>::Type. Поэтому я думаю, что пришло время перейти к конкретному компилятору.

так что мне нужно ifdef на Visual Studio ? На данный момент я использую 2010, но могу переключиться на 2012.

3 ответов


использовать макрос _MSC_VER. Чтобы проверить, является ли компилятор VS2010 или выше:

#if _MSC_VER >= 1600

следующие значения для различных версий VS:

  • VS 2003 (VC7.1):1310
  • ПРОТИВ 2005 (ДЛЯ VC8): 1400
  • VS 2008 (VC9):1500
  • VS 2010 (VC10):1600
  • VS 2012 (VC11):1700

просто использовать friend class ... синтаксис для обоих компиляторов. The friend ... синтаксис, без class ключевое слово, на самом деле недействительно; VS2010 неверно, не жалуясь на это.

посмотреть этот вопрос.


Я думаю, вам нужно использовать следующий код для кросс-компилятора:

template <typename T> class B;

template <typename T>
class A
{
    friend typename B<T>::V;
};