コンテンツにスキップ

なぜかコンパイルできない

正しいように見えて、コンパイルエラーになるコードの紹介です。

添字とラムダ式

#include <iostream>

int main()
{
    int a[3] = { 10, 20, 30 };

    std::cout << a[[](){ return 1; }()] << '\n';
}

使えない変数

#include <memory>

int main()
{
    std::shared_ptr<int> p();

    p.reset();
}

ポインタ型のデフォルト引数

void Func(int*=nullptr)
{

}

int main()
{
    Func();
}

関数のオーバーロード

#include <iostream>

using T = int&;

void f(T&)
{
    std::cout << "A\n";
}

void f(const T&)
{
    std::cout << "B\n";
}

int main()
{
    int x;
    f(x);
}

0xe

int main()
{
    return 0xe-0xe;
}