V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
innoink
V2EX  ›  问与答

下面段代码,为什么 gcc 和 clang 结果不一样?

  •  
  •   innoink · Aug 31, 2018 · 4520 views
    This topic created in 2800 days ago, the information mentioned may be changed or developed.
    11 replies    2018-08-31 23:07:07 +08:00
    limerence12138
        1
    limerence12138  
       Aug 31, 2018 via Android
    原来写过作业,可能是头文件名字不一样吧,我原来遇到过这样的问题,比如第一个可能不叫这个名字之类的,我的回忆加猜测
    innoink
        2
    innoink  
    OP
       Aug 31, 2018
    @ql936611560 这三个都是标准库的头文件,应该不会出错的
    zhanglintc
        3
    zhanglintc  
       Aug 31, 2018
    编译命令是啥, 我遇到过编译命令的坑
    innoink
        4
    innoink  
    OP
       Aug 31, 2018
    @zhanglintc cc -std=c++11 -o m m.cpp
    zhanglintc
        5
    zhanglintc  
       Aug 31, 2018
    @innoink #4 看起来跟我的问题不一样, 没法解答了
    innoink
        6
    innoink  
    OP
       Aug 31, 2018
    我个人无法理解为什么 gcc 能编译成功,this 指针本来就不能用 shared_ptr<Base>去赋值啊
    hsyu53
        7
    hsyu53  
       Aug 31, 2018   ❤️ 2
    @innoink std::bind 的第一个参数是 Callable, 而 Callable 的 INVOKE(f, t1, t2, ..., tN) 过程,t1 可以是 smart pointer。
    innoink
        8
    innoink  
    OP
       Aug 31, 2018 via Android
    @hsyu53 那为啥 clang 不行呢。。
    innoink
        9
    innoink  
    OP
       Aug 31, 2018 via Android
    @hsyu53 我看了 cppreference 上,确实说 INVOKE 的第一个参数可以是智能指针,所以 gcc 的行为能理解,但是 clang 为何不行。。
    hsyu53
        10
    hsyu53  
       Aug 31, 2018
    可能是 clang 3.8 对 c++11 标准的实现不完整,我这 clang(Apple LLVM version 9.1.0 (clang-902.0.39.2))也能编译成功。
    innoink
        11
    innoink  
    OP
       Aug 31, 2018
    @hsyu53 明白了。。是 clang 版本太旧了,我在 cppreference 上那个在线编译的地方跑的,平时 clang 用的少,还以为那个是个比较新的版本
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2564 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 07:47 · PVG 15:47 · LAX 00:47 · JFK 03:47
    ♥ Do have faith in what you're doing.