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

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

Восстановить пароль Регистрация
 
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.12.2012, 00:09     Захват const переменной из лямбды: разный результат в g++ и clang #1
Добрый день.
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++
char operator[](unsigned short offset) const; // что означает const? C++
C++ Что это bool operator== (const CLASS&) const;
C++ Разный результат работы функции в release и debug
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.12.2012, 07:35     Захват const переменной из лямбды: разный результат в g++ и clang #3
soon, наверняка баг. На g++ 4.7.2 тоже самое, только вывод другой (1).
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 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
Ответ Создать тему
Опции темы

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