2014-02-04 2 views
3

Есть ли способ определить, что какой-то тип не копируется во время компиляции? мне нужно следующий:Есть ли какой-либо способ static_assert, что аргумент шаблона не подлежит копированию?

template<typename T, unsigned long long MaxSize> 
struct circular_buffer : boost::noncopyable { 
    static_assert(typeof(T) ?????, "T must be noncopyable!"); 
}; 
+1

Почему это имеет значение, если 'T' можно копировать, если вы не копируете объекты' T'? Если бы вы использовали возможность копирования для выбора между различными реализациями, это имело бы смысл, но я не могу представить себе, почему вы хотели бы ограничить что-то работать только с не подлежащими копированию объектами. Очевидно, что все, что вы можете сделать с не скопированным типом, вы также можете сделать с помощью типа с возможностью копирования. – Casey

+0

@Casey, T не является однородным типом - поскольку это последнее поле, имеются данные char [0]. Мне нужен буфер spsc-lockfree для гетерогенных типов - и я хочу, чтобы он был максимально безопасным – nothrow

ответ

11

C++ 11 имеют черты типа is_copy_assignable и is_copy_constructible. Убедитесь, что оба значения являются ложными.