Явная специализация шаблона

Такой вопрос. Явная специализация для структуры box, выдаёт адрес, вместо значения. Где ошибка и почему она вместо значения выводит адрес?

#include <iostream>
using namespace std;

struct box 
{
    char maker [40];
    float height;
    float width;
    float length;
    float volume; 
};

template<typename T>
T maxs(T a, T b)
{
    return a > b ? a : b;
} 

template <> box maxs(box b1, box b2) 
{
    return b1.volume > b2.volume? b1 : b2; }

template<typename T>
T maxs(T a, T b);

template <> box maxs(box b1, box b2);

int main(int argc, char *argv[])
{
    box *sa = new struct box;
    box *sb = new struct box;
    sa->volume = 19.0;
    sb->volume = 15.0;
    
    cout << "Max volume: " << maxs(sa, sb) << endl;
    delete sb;
    delete sa;
    return 0;
}

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

Автор решения: Harry

Вы передаете указатели на box, никакая явная специализация не работает - работает сравнение указателей, результат - указатель, каковой и выводится...

Кстати, если бы вдруг сработало - как вы себе представляете вывод box в cout? У вас же специализация возвращает сам box, а оператора вывода для этого типа в программе нет...

Далее, для функций я бы выбирал не специализацию шаблона, а перегрузку - типа

const box& maxs(const box& a, const box& b) { ...

P.S. На будущее будьте внимательны, ставя метки. Вы, когда выбирали метку "шаблоны", должны были прочесть

Для пометки вопросов, имеющих отношение к templates C++, имеется метка шаблоны C++! Шаблоны (Шаблоны проектирования, паттерны проектирования, Design Patterns, ) - представляют собой подход к проектированию чего-либо. Не являются готовым решением, а лишь представляют общее описание решения проблемы, которое можно использовать в различных ситуациях. В ООП широко используются 23 паттерна.

Где в вашем вопросе паттерны проектирования?...

→ Ссылка