14

このコードを見てください:

#include <iostream>
#include <string>

void foo(int(*f)()) {
    std::cout << f() << std::endl;
}

void foo(std::string(*f)()) {
    std::string s = f();
    std::cout << s << std::endl;
}

int main() {
    auto bar = [] () -> std::string {
        return std::string("bla");
    };

    foo(bar);

    return 0;
}

でコンパイルする

g++ -o test test.cpp -std=c++11

以下につながります:

bla

それがすべきように。でコンパイルする

clang++ -o test test.cpp -std=c++11 -stdlib=libc++

以下につながります:

zsh: illegal hardware instruction  ./test

そしてそれをコンパイルする

clang++ -o test test.cpp -std=c++11 -stdlib=stdlibc++

次のことにもつながります。

zsh: illegal hardware instruction  ./test

Clang/GCC バージョン:

clang version 3.2 (tags/RELEASE_32/final)
Target: x86_64-pc-linux-gnu
Thread model: posix

gcc version 4.7.2 (Gentoo 4.7.2-r1 p1.5, pie-0.5.5) 

何がうまくいかないのか誰にも提案がありますか?

前もって感謝します!

4

2 に答える 2