НКУ не дает мне ошибку на примере я сделал, когда я надеялся, что это будет:Почему не GCC дает мне ошибку
class CannotBeCopied {
public:
CannotBeCopied(const CannotBeCopied&) = delete;
CannotBeCopied& operator=(const CannotBeCopied&) =delete;
CannotBeCopied() { }
~CannotBeCopied() { }
};
template<class T>
class FirstVector {
public:
FirstVector() {
size = 1;
data = new T[size];
}
~FirstVector() {
delete[] data;
}
FirstVector(const FirstVector& source) {
size = source.size;
data = new T[size];
for(int k=0;k!=size;k++) {
data[k] = source.data[k]; //<--I EXPECT AN ERROR HERE
}
}
private:
int size;
T* data;
};
Эта ошибка не происходит, когда копия конструктор не используется (т. е. он возникает, когда используется конструктор копирования).
Из-за шаблона я не могу просто переместить copy-ctor в файл кода и сбой при его компиляции.
Как я могу получить это, чтобы потерпеть неудачу?
Это не SFINAE, оно не должно быть способным создать экземпляр шаблона. Если копия-т е р сам был метод шаблона (например, поместив:.
template<class U=T>
на линии выше, то было бы SFINAE
Я использую GCC 4.8.1, -pedantic -Wall -Wextra
конечно, и -std=c++11
Я надеялся получить эту неудачу с:
int main() {
FirstVector<CannotBeCopied> whatever;
}
Я знаю, что GCC просто лениться и не делать работу не нужно, но мне не нравится-е если я должен явно создать экземпляр этого шаблона в файле кода, я бы получил ошибку. Есть ли способ получить ошибку, которую я хочу?
Вы пытались вызвать конструктор копирования 'FirstVector'? –
immibis
О да, @immibis - если вы на самом деле используете его, он дает ошибку. Он должен давать ошибку всякий раз, когда создается экземпляр с типом без копирования. –
Спецификация языка Java вызывает указатели Java, указатели. Просто покажите им это. –