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

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

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

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

27.12.2012, 00:09. Просмотров 477. Ответов 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++
C++ Разный результат работы функции в release и debug
C++ Лямбды в списке инициализации членов
Можно ли писать вложенные лямбды? (с++11) C++
C++ Одинаковые аргументы, разный результат
C++ Тело лямбды. Двумерный массив
C++ Изменяется ли адрес или значение переменной при объявлении ее как const?
с хабра и мой код дают разный результат. why C++
C++ Сборка и отладчик дают разный результат
Не компилится из-за лямбды C++
C++ Как вернуть значение лямбды?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для 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!
 Аватар для gray_fox
1250 / 1133 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
27.12.2012, 07:35     Захват const переменной из лямбды: разный результат в g++ и clang #3
soon, наверняка баг. На g++ 4.7.2 тоже самое, только вывод другой (1).
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12512 / 7074 / 794
Регистрация: 27.09.2012
Сообщений: 17,466
Записей в блоге: 2
Завершенные тесты: 1
27.12.2012, 08:55     Захват const переменной из лямбды: разный результат в g++ и clang #4
Цитата Сообщение от soon Посмотреть сообщение
Обходится путем использования ссылки или auto
в дополнение к посту I.M.
C++
1
const T a=t;
soon
 Аватар для soon
2536 / 1301 / 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
Ответ Создать тему
Опции темы

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