When I compile this:
#ifndef BTREE_H
#define BTREE_H
#include
template
class btree
{
public:
class node
{
The C++ grammar is horrendous, and as such it is not possible, when given a template class, to know whether the ::node you refer to is a variable/constant or a type.
The Standard therefore mandates that you use typename before types to remove this ambiguity, and treats all other usages as if it was a variable.
Thus
template
typename btree::node* btree::findLead(T const& value)
^~~~~~~~
is the correct signature for the definition.