Компоновщик ругается на функцию которая объявлена но не определена(грубо говоря не может найти её)

У меня есть функция которая выводит в консоль все элементы любого(почти: vector, list, deque) stl контейнера. При сборке проекта с этими файлами, компоновщик ругается что он не может найти определение этой же функции(или я чего-то не понимаю), помогите!!! Заголовочный файл:

//a.h
#pragma once

#define DEBUG
#define FULL
#ifdef DEBUG

namespace bvd_s{
#ifdef FULL
    template<template<class E, class Alloc = std::allocator<E>> typename container, typename T>
    void print(container<T>& arg);

#endif //full != define

}

#endif // DEBUG

cpp файл:

//a.cpp
#include "a.h"
#include <iostream>

template<template<class E, class Alloc = std::allocator<E>> typename container, typename T>
void bvd_s::print(container<T>& arg) {
    for (auto i = arg.begin(); i != arg.end(); ++i) {
        std::cout << *i << std::endl;
    }
}

Ещё один cpp файл для вызова функции:

//main.cpp
#include "main.h"
#include <iostream>
#include <vector>
using namespace std;
int main() {
    vector<int> v = { 12, 567, 23, 5 };
    bvd_s::print(v);
    return 1;
}

Ответы (0 шт):