Какие IDE и текстовые редакторы могут выводить тип переменных, объявленных с использованием ключевого слова auto в С++ 11

В "Почти всегда авто" статья Herb Sutter перечисляет несколько причин для объявления переменных с помощью автоматического ключевого слова.

Он говорит, что фактический тип переменной может быть автоматически выведен IDE и показан путем зависания над именем переменной.

Я хотел бы знать, какие IDE и текстовые редакторы (или плагины) в настоящее время поддерживают "автоматический" вывод типа переменной.

Edit:

Список IDE из ответов:

  • Visual Studio 201x
  • Eclipse,
  • Qt Creator 2.7.0
  • KDevelop 4.5.1

Текстовые редакторы

Как насчет Vim, Emacs, Sublime Text и т.д. - есть ли плагины, которые поддерживают вывод типа?

Ответ 1

Visual Studio 2010, Visual Studio 2012 и Visual Studio 2013 поддерживают вывод типа для переменных, объявленных с ключевым словом auto. Это относится как к подсказкам IntelliSense, так и к предложениям автозаполнения.

Начиная с Visual Studio 2010 поддержка С++ IntelliSense была полностью переработана (см. Восстановление Intellisense). IntelliSense теперь управляется Edison Design Group (EDG) интерфейсом компилятора С++. Независимо от того, что может сделать EDG, вы увидите отражение в IntelliSense.

Обратите внимание, что всплывающие подсказки IntelliSense будут отображать базовый тип для переменных auto. Он не будет обрабатывать дерево снова и заменяет части соответствующими typedef. В Visual Studio 2012 следующий код

std::string str;

std::string::iterator i1 = str.begin();
auto i2 = str.begin();

отобразит итераторы как

std::basic_string<char,std::char_traits<char>,std::allocator<char> >::iterator i1

и

std::_String_iterator<std::_String_val<std::_String_base_types<char,std::allocator<char> >::_Val_types>::_Myt> i2

Учитывая, что я бы с удовольствием не соглашался с Хербом Саттером о его оценке того, что IDE достаточно, чтобы вывести тип, когда вам это нужно. auto отлично по отношению к надежности, правильности и гибкости, но, конечно же, не соответствует потребностям разработчиков, работающих на большой базе кода.

Ответ 2

Встроенная поддержка

  • Visual Studio 2010+
    • Предостережение: не очень хорошо работает с typedefs; см. iинспективный ответ
  • KDevelop 4.5.1+
    • Предостережение: некоторые неправильные вычеты (например, плавающие литералы); см. ответ Джонни
  • Qt Creator 2.7.0 +
  • Eclipse (не уверен, что через плагин или родной)

Поддержка через плагины

  • Плагины Vim:
  • Плагины Emacs:
    • .... ЖЕСТКО есть такой плагин где-то.

Примечание: первый черновик этого ответа был создан простым объединением существующих ответов плюс комментарий Eclipse, а затем добавлением заметки о Vim. Без такого "совокупного" ответа этот вопрос (и его существующие ответы), по-видимому, нарушает правило "одного правильного ответа".

Это действительно должно быть отформатировано как таблица; слишком плохо, что у нас нет этой возможности.

Ответ 3

KDevelop 4.5.1 также поддерживает вывод типа. Хотя это, вероятно, делает небольшие ошибки.

Примеры:

auto i = 3;    // Deduces int
auto d = 3.0;  // Deduces double
auto f = 3.0f; // Deduces double - wrong

Ответ 4

Qt Creator 2.7.0 тоже может это сделать, судя по этому исходному коду тестирования:

class A
{
    void f();
};

int main()
{
    auto a = A();
    return 0;
}