[msvc2013 bug] virtual funtions return type
От: Aleх  
Дата: 29.03.14 19:43
Оценка: 88 (6)
Компилируется такой код:

#include <vector>
#include <memory>

struct Base
{
    virtual std::vector<int> foo() const = 0;
};

template<class T>
struct Class
    : Base 
{
    virtual double foo() const override
    {
        return 123;
    }
};

int main()
{
    std::unique_ptr<Base> ptr = std::make_unique<Class<int>>(); // можно заменить на make_shared и т.д.
    std::vector<int> res = ptr->foo();

    return 0;
}


В данном случае испортится стек при вызове функции foo. Если в классе Class у функции foo сделать возвращаемый равный по размеру std::vector<int>, стек при вызове не испортится, просто в результате будет мусор.

Так что будьте осторожны!
Re: [msvc2013 bug] virtual funtions return type
От: Ops Россия  
Дата: 29.03.14 20:07
Оценка: +3 -1
Здравствуйте, Aleх, Вы писали:

A>В данном случае испортится стек при вызове функции foo. Если в классе Class у функции foo сделать возвращаемый равный по размеру std::vector<int>, стек при вызове не испортится, просто в результате будет мусор.


Стек тут не при чем, оно не должно компилироваться.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[3]: [msvc2013 bug] virtual funtions return type
От: uzhas Ниоткуда  
Дата: 31.03.14 19:23
Оценка: :)
Здравствуйте, Ops, Вы писали:

Ops>Не, с new нормально ругается.


ну тогда сейчас поставлю эту студию себе
надо идти в ногу со временем
Re[2]: [msvc2013 bug] virtual funtions return type
От: Aleх  
Дата: 29.03.14 20:34
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Здравствуйте, Aleх, Вы писали:


A>>В данном случае испортится стек при вызове функции foo. Если в классе Class у функции foo сделать возвращаемый равный по размеру std::vector<int>, стек при вызове не испортится, просто в результате будет мусор.


Ops>Стек тут не при чем, оно не должно компилироваться.


Про стек я написал потому, что если он испортится, то в работающей программе можно сразу увидеть ошибку, которую пропустил компилятор. Если же неправильные данные приедут, то программа упадет чуть позже.
Re: [msvc2013 bug] virtual funtions return type
От: Кодт Россия  
Дата: 31.03.14 07:34
Оценка:
Здравствуйте, Aleх, Вы писали:

A>Компилируется такой код:


Что интересно, в 2010 и 2012 оно честно не компилируется. Свежий баг!
Перекуём баги на фичи!
Re: [msvc2013 bug] virtual funtions return type
От: uzhas Ниоткуда  
Дата: 31.03.14 13:41
Оценка:
Здравствуйте, Aleх, Вы писали:

A> std::unique_ptr<Base> ptr = std::make_unique<Class<int>>(); // можно заменить на make_shared и т.д.


а если new написать вместо make_shared, то тоже скомпилируется и упадет в рантайме?
Re[2]: [msvc2013 bug] virtual funtions return type
От: Ops Россия  
Дата: 31.03.14 19:09
Оценка:
Здравствуйте, uzhas, Вы писали:

U>а если new написать вместо make_shared, то тоже скомпилируется и упадет в рантайме?


Не, с new нормально ругается.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[4]: [msvc2013 bug] virtual funtions return type
От: Кодт Россия  
Дата: 31.03.14 20:14
Оценка:
Здравствуйте, uzhas, Вы писали:

U>ну тогда сейчас поставлю эту студию себе

U>надо идти в ногу со временем

Надо стрелять в ногу со временем!
Эхъ, а у меня пробный период как раз закончился, а хакать или бить челом админа влом.
Перекуём баги на фичи!
Re: [msvc2013 bug] virtual funtions return type
От: MT-Wizard Украина  
Дата: 01.04.14 16:11
Оценка:
Здравствуйте, Aleх, Вы писали:

A>Компилируется такой код:

A>...
A>Так что будьте осторожны!

Зафайлил багу фронтендщикам. Ждём-c...
А ти, москалику, вже приїхав (с)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.