Ошибка использования необъявленного идентификатора при использовании Clang в проекте C ++

я использую лязг в качестве проверки синтаксиса в моем проекте C ++. В Emacs он вызывается через Flycheck, и меня раздражает use of undeclared identifier ошибка, следующий минимальный рабочий пример для иллюстрации проблемы:

В файле testnamepace.cpp:

#include "testnamespace.hpp"
int main() {
const unsigned DIM = 3;
testnamespace::A<DIM> a;
a.f();
a.g();
return 0;
}

В файле testnamespace.hpp:

#ifndef testnamespace_h
#define testnamespace_h

#include <iostream>

namespace testnamespace {
// My code uses lots of templates so this MWE uses a class template
template <unsigned DIM> class A;
}

template <unsigned DIM>
class testnamespace::A{
public:
static const unsigned dim = DIM;

A() {std::cout << "A(): dim = " << dim << std::endl;}

// in my case some functions are defined in a .hpp file...
void f() {
std::cout << "call f()" << std::endl;
}

// ...and others are defined in a .ipp file
void g();
};

#include "testnamespace.ipp"#endif

В файле testnamespace.ipp:

template <unsigned DIM>
void testnamespace::A<DIM>::g() {
//   ^^^^^^^^^^^^^ this results in the following error:
//   testnamespace.ipp:2:6:error: use of undeclared identifier 'testnamespace' (c/c++-clang)
std::cout << "g()" << std::endl;
}

Поскольку код компилируется без предупреждения, используя g++ -Wall testnamespace.cpp -o testnamespace (gcc версия 4.7.2) Мне интересно, является ли это ошибкой в ​​моем коде или это просто «особенность» использования Clang.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]