Благодаря коллеге я нашел решение обеих проблем.
Для первого вопроса, статической переменной-члена, я переместил определение в файл CPP и использовал специализацию шаблона. Причина, по которой это не нарушается в тестовом коде, который я разместил, заключается в том, что основной тип (int, float и т. Д.) Решает проблему, но если вы используете более сложный тип, такой как класс, то это должно вызвать ошибку. Я знаю, что это не лучшее решение в мире, но это единственное, что работает несколько чистым. Если у кого-то есть лучшее решение, пожалуйста, дайте мне знать:
template<>
const tTestType tTestTemplate<uint32_t>::kTestStatic(10);
Для второго вопроса - функция, использующая тип, объявленный внутри класса, я пошел с решением, которое я описал в первоначальном посте, и просто переместил определение функции внутри класса шаблона, так что теперь это выглядит так:
template<class T>
class tTestTemplate
{
public:
tTestTemplate() { }
private:
typedef std::vector<int32_t> tSomeVec;
// Declaring the function inside the class to fix the compiler error.
tSomeVec mTestFunction() const
{
tSomeVec result;
result.push_back(0);
return result;
}
static const tTestType kTestStatic;
};