class Foo
{
private:
static const std::vector<std::string> bar;
};
const std::vector<std::string> Foo::bar{
"pwd", "ls", "cd", "cp", "mw", "rm"
};
template <class T>
class storage
{
struct storagestruct
{
T item;
storagestruct* next = nullptr;
};
private:
storagestruct* first = nullptr;
public:
storage<T>() = default;
virtual ~storage() = default;
inline storagestruct& getfirst() const;
};
template<class T>
inline typename storage<T>::storagestruct& storage<T>::getfirst() const
{
return *first;
}
template< typename T >
struct X
{
template< typename U >
inline T foo() { return {}; };
};
template< typename T, typename U >
struct Y
{
T bar = X<T>().template foo<U>();
};
Думаю, тебе будет полезно почитать этот код.
А вообще, шум Перлина - не тот механизм чтобы реки создавать. Клеточные автоматы, Square-Diamond и волновой алгоритм (поиск в ширину) куда удобнее будут.