Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
soon
2538 / 1303 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
#1

Захват const переменной из лямбды: разный результат в g++ и clang - C++

27.12.2012, 00:09. Просмотров 487. Ответов 4
Метки нет (Все метки)

Добрый день.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
template <class T>
void foo(const T& t)
{
    const int a = t;
    [&]
    {
        std::cout << a << std::endl;
    }();
}
 
 
int main()
{
    foo(42);
    return 0;
}
Clang выводит 42, а вот g++ кидает "warning: ‘a’ is used uninitialized in this function" и выводит 0. Обходится путем использования ссылки или auto. Собственно, вопрос - кто прав и проявляется ли данная проблема на g++ 4.8 (у кого стоит - протестите, пожалуйста).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2012, 00:09     Захват const переменной из лямбды: разный результат в g++ и clang
Посмотрите здесь:

Модификация внутренней переменной лямбды - C++
Добрый вечер, что-то помню, что-то всплывает перед глазами в качестве кода - но не могу подобрать запрос в гугле, чтобы найти то о чём...

Одинаковые аргументы, разный результат - C++
Есть следующая функция: void line(float x1 , float y1 , float x2 , float y2 , float q , TGAColor c , TGAImage&amp; img ) { float...

Почему выводится разный результат? - C++
int main(){ int mass={3,5,3,5,3}; int i=0, r=0; for(int i = 0; i &lt; 5; i++) if(mass % 3 == 0) ...

Сборка и отладчик дают разный результат - C++
Нужно было написать программу для вывода всех минимальных по длине слов в строке. Как такое возможно? #include &lt;cstdio&gt; #include...

с хабра и мой код дают разный результат. why - C++
здравствуйте, ради обучения решил сделать проверку во время компиляции на наличие в классе функции, возвращающей void и принимающей int......

Разный результат работы функции в release и debug - C++
Такая проблема. Есть программа, в которой объявляется переменная типа std::string. Ниже вызывается функция, реализованная в dll,...

int const * const foo(const int* param) const - разъясните значение квалификаторов - C++
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ? 2: делает содержимое массива или...

Возможно ли убрать cv-спецификатор (const) у переменной? - C++
Доброго времени суток! Прошу помощи кое что понять(у Шилдта и Либерти этого не нашёл.....или проглядел). Недопонимание в следующем: ...

char operator[](unsigned short offset) const; // что означает const? - C++
Собстенно вопрос уже озвучен :).

Что это bool operator== (const CLASS&) const; - C++
Что это? class CLASS { public: bool operator== (const CLASS&amp;) const; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
27.12.2012, 04:31     Захват const переменной из лямбды: разный результат в g++ и clang #2
По-моему, это баг
Очень похоже на http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52026
Должно выводить 42. Еще вариант "решения" - это [&a]
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
27.12.2012, 07:35     Захват const переменной из лямбды: разный результат в g++ и clang #3
soon, наверняка баг. На g++ 4.7.2 тоже самое, только вывод другой (1).
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
27.12.2012, 08:55     Захват const переменной из лямбды: разный результат в g++ и clang #4
Цитата Сообщение от soon Посмотреть сообщение
Обходится путем использования ссылки или auto
в дополнение к посту I.M.
C++
1
const T a=t;
soon
2538 / 1303 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2012, 10:05  [ТС]     Захват const переменной из лямбды: разный результат в g++ и clang #5
Croessmah, это упрощенный вариант. В оригинале переменная отвечала за расстояние между итераторами. Так что там единственный адекватный костыль был через auto. Ну и через явный захват переменной, пожалуй.
Yandex
Объявления
27.12.2012, 10:05     Захват const переменной из лямбды: разный результат в g++ и clang
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru