Здравствуйте, innochenti, Вы писали:
I>I>#include <iostream>
I>template<class U, int index>
I>struct Index
I>{
I> template<class Z, int T>
I> struct Helper;
I> template<class Z>
I> struct Helper<Z,index>
I> {
I> static const int value = 1;
I> };
I> template<class Z, int T>
I> struct Helper
I> {
I> static const int value = 0;
I> };
I> static const int value = Helper<U,1>::value;
I>};
I>int main()
I>{
I>Index<int,1> j;
I>std::cout << j.value << std::endl;
I>return 0;
I>}
I>
I>в студии 2010 результат равен 0.
I>а в http://ideone.com/n1tXs
I>результат равен 1.
I>Объясните, пожалуйста, в чем подвох.
Я упростил ваш пример, убрав первый шаблонный параметр. И у меня в студии 2010 выводит 1, а не 0, если создавать объект как
Index<1> i;. Ежели создавать объект как
Index<2> i;, то выводит 0.
Вот упрощеннный вариант:
#include "stdafx.h"
#include <iostream>
template <int x>
struct Index
{
template <int y>
struct Helper;
template <>
struct Helper<x>
{
static const int value = 1;
};
template <int y>
struct Helper
{
static const int value = 0;
};
static const int value = Helper<1>::value;
};
int _tmain(int argc, _TCHAR* argv[])
{
Index<1> i;
std::cout << "Index::i = " << i.value << std::endl;
}