Ничто из этого не помогло мне. Я сделал это:
db.collection.find( {arrayName : {$exists:true}, $where:'this.arrayName.length>1'} )
Вполне уверенный VC ++ имеет "проблемы" здесь. Comeau и g ++ 4.2 оба довольны следующей программой:
struct X
{
int i;
void* p;
};
template<int X::*P>
void foo(X* t)
{
t->*P = 0;
}
template<void* X::*P>
void foo(X* t)
{
t->*P = 0;
}
int main()
{
X x;
foo<&X::i>(&x);
foo<&X::p>(&x);
}
VC ++ 2008SP1, однако, не имеет ни одного из него.
У меня нет времени для прочтения моего стандарта для обнаружения точно, что то, что..., но я думаю, что VC ++ не прав здесь.
Попытайтесь изменить JSObject * на другой тип указателя, чтобы видеть, воспроизводит ли это ошибку. JSObject определяется при использовании? Кроме того, возможно, JSObject* должен быть в parens.
Я не, конечно, никакой шаблонный гуру, но недооцениваю это кипение к тонкому случаю попытки дифференцировать перегрузки, базирующиеся просто на типе возврата?
Так как C++ не позволяет перегружаться функций на основе типа возврата, возможно, то же самое применяется к шаблонным параметрам.