Ответ 1
Первый - это лямбда без списка параметров и последующего вызова.
[]{}
эквивалентно [](){}
, поэтому вся строка эквивалентна
[](){}();
Вторая - это пара фигурных скобок, которые вводят, а затем сразу закрывают область, за которой следует неиспользуемое определение лямбда без списка параметров:
{
// empty scope
}
[]{}; // lambda
Вы можете обратиться к http://en.cppreference.com/w/cpp/language/lambda для вариантов синтаксиса лямбда-определения.