K

#### kurt krueckeberg

#include <utility>

template<typename K> class Tree23 {

public:

template<typename Key> class Node {

private:

friend class Tree23<K>;

// snip . . .

};

Node<K> root;

public:

// snip ...

std:air<bool, Node<K> *> Search(K key);

};

I get several compile errors on the signature of the Search method implementation

template<typename K>

std:air<bool, Tree23<K>::Node<K> *> Tree23<K>::Search(K key)

{

// make sure tree has at least one element

if (root == 0) {

return std::make_pair(false, 0);

} else {

return Locate(key, root);

}

}

The errors correspond to the line

template<typename K> std:air<bool, Tree23<K>::Node<K> *> Tree23<K>::Search(K key)

The complie errors are:

Node.h:64:55: error: type/value mismatch at argument 2 in template parameter list for 'template<class _T1, class _T2> struct std:air'

Node.h:64:55: error: expected a type, got '(Tree23<K>::Node < <expression error>)'

Node.h:64:58: error: expected unqualified-id before '>' token

Node.h:64:58: error: expected initializer before '>' token

I also tried adding typename to the signature

template<typename K>

std:air<bool, typename Tree23<K>::Node<K> *> Tree23<K>::Search(K key)

{ //...}

This gave a different set of errors

Node.h:57:48: error: 'typename Tree23<K>::Node' names 'template<class K> template<class Key> class Tree23<K>::Node', which is not a type

Node.h:64:67: error: template argument 2 is invalid

Node.h:64:70: error: prototype for 'int Tree23<K>::Search(K)' does not match any in class 'Tree23<K>'

Node.h:57:53: error: candidate is: std:air<bool, Tree23<K>::Node<K>*> Tree23<K>::Search(K)

Why, with typename added, does it think the prototype is 'int Tree23<K>::Search(K)'