标签: clang++

在gcc中,C++ 1z/C++ 17支持的状态是什么?

Clang有一个很好的页面描述了C++ 1z/C++ 17特性支持的项目状态(以及C++ 11和C++ 14,它是同一页面).

g ++有一个关于C++ 14特性的页面,但我找不到任何关于C++ 17/C++ 1z的内容.这是否正在进行,但只是没有出现在网络上?对于5.0版?

c++ gcc clang++

33
推荐指数
3
解决办法
3万
查看次数

是"sizeof new int;" 未定义的行为?

码:

#include<iostream>

using namespace std;

int main() 
{
    size_t i = sizeof new int;

    cout<<i;
}
Run Code Online (Sandbox Code Playgroud)

在GCC编译器中,工作正常,没有任何警告或错误和打印输出8.

但是,在clang编译器中,我收到了以下警告:

warning: expression with side effects has no effect in an unevaluated context [-Wunevaluated-expression]
    size_t i = sizeof new int;
Run Code Online (Sandbox Code Playgroud)
  • 哪一个是真的?
  • sizeof new int;未定义的行为?

c++ g++ sizeof c++11 clang++

32
推荐指数
2
解决办法
4103
查看次数

具有4个字节的"填充类'测试器'警告意味着什么?

对于这个简化的测试用例:

#include <map>

class Tester {
    int foo;
    std::map<int, int> smap;
};

int main() {
    Tester test; 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下编译器警告:

$ clang++ -std=c++98 -Weverything test.cc 
test.cc:5:24: warning: padding class 'Tester' with 4 bytes to align 'smap' [-Wpadded]
    std::map<int, int> smap;
                       ^
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这个警告意味着什么,以及我应该如何解决它?

c++ compiler-warnings clang++

30
推荐指数
2
解决办法
2万
查看次数

为什么这段代码用gcc编译而不用clang编译

这段代码与gcc/g ++和msvc完全兼容,但与clang无关.它一直抱怨没有找到Log的匹配功能,发生了什么?

#include <iostream>

template <typename Function, typename... Args>
auto Call(Function func, Args&&... args) -> typename std::result_of<Function&(Args&&...)>::type
{
    return func(std::forward<Args>(args)...);
}

template <typename T, typename... Args>
T (*Log( T (*FuncPtr)(Args...) ))(Args...)
{
    return FuncPtr;
}

int main()
{
    auto r = Log(Call<int(int), int>)([](int x){
        return x*10;
    }, 10);
    std::cerr << r << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

错误:

> error: no matching function for call to 'Log'
>     auto r = Log(Call<int(int), int>)([](int x){
>              ^~~ test7.cpp:15:5: note: candidate template ignored: couldn't infer …
Run Code Online (Sandbox Code Playgroud)

c++ g++ c++11 clang++

30
推荐指数
1
解决办法
1712
查看次数

无法在 c++20 中使用 std::format

我一直在尝试使用std::formatC++20中包含的函数。据我所知,clang 14 应该支持此功能,但由于某种原因我收到以下错误:no member named 'format' in namespace 'std'。根据cppreference 的编译器支持图表,clang 应该支持文本格式,但我仍然收到此错误。我不知道问题是什么。

c++ clang++ fmt

29
推荐指数
2
解决办法
2万
查看次数

将内存清理程序与libstdc ++一起使用

我希望使用-fsanitize=memoryclang中的标志来分析如下的程序:

#include <string>
#include <iostream>
#include <fstream>
using namespace std;

void writeToFile(){
    ofstream o;
    o.open("dum");
    o<<"test"<<endl; //The error is here.
                     //It does not matter if the file is opened this way,
                     //or with o("dum");
    o.close();
}
int main(){
    writeToFile();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这个程序是正确的,但是当我使用clang++ san.cpp -fsanitize=memory它时失败(在运行时):

UMR in __interceptor_write at offset 0 inside [0x64800000e000, +5)  
==9685== WARNING: MemorySanitizer: use-of-uninitialized-value  
    #0 0x7f48d0899ae5 (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x7bae5)  
    #1 0x7f48d08d1787 (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0xb3787)  
    #2 0x7f48d08d21e2 (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0xb41e2)  
    #3 0x7f48d08cfd1e (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0xb1d1e)  
    #4 0x7f48d08b1f2d (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x93f2d)  
    #5 0x7f48d16d60f5 in writeToFile() /home/daniel/programming/test/santest.cpp:10 …
Run Code Online (Sandbox Code Playgroud)

c++ libstdc++ clang++ msan memory-sanitizer

28
推荐指数
2
解决办法
3300
查看次数

类无法访问自己的私有静态 constexpr 方法 - Clang 错误?

这段代码不能在 Clang (6,7,8,9,trunk) 中编译,但在 GCC (7.1, 8.1, 9.1) 中编译得很好:

template<class T> struct TypeHolder { using type = T; };

template<int i>
class Outer {
private:
    template<class T> 
    static constexpr auto compute_type() {
        if constexpr (i == 42) {
            return TypeHolder<bool>{};
        } else {
            return TypeHolder<T>{};
        }
    }

public:
    template<class T>
    using TheType = typename decltype(Outer<i>::compute_type<T>())::type;
};

int main() {
    Outer<42>::TheType<int> i;
}
Run Code Online (Sandbox Code Playgroud)

叮当告诉我:

<source>:17:49: error: 'compute_type' is a private member of 'Outer<42>'
Run Code Online (Sandbox Code Playgroud)

......这当然是,但我尝试访问该成员同一类。我不明白为什么它不应该在那里访问。我是否遇到了(我应该提交)Clang 错误?

您可以在Godbolt 的编译器资源管理器中 …

c++ language-lawyer clang++ c++17

28
推荐指数
1
解决办法
590
查看次数

在OS X上与clang ++链接会生成许多符号未找到的错误

我正在尝试使用clang ++编译器在OS X 10.8上编译一些C++代码(包括C++ 11特性).我有一个生成目标文件的makefile,然后在命令上:

clang++  -o Analysis.so -shared DataFile.o CR39DataFile.o
Run Code Online (Sandbox Code Playgroud)

关于架构x86_64找不到符号,我收到很多错误.该代码在使用g ++的*nix系统上正常工作,并适当地更改编译器标志以支持C++ 11.要编译*.o我这样做:

clang++ -c -Wall -std=c++11 -stdlib=libc++ -I../src ../src/DataFile.cc
Run Code Online (Sandbox Code Playgroud)

编辑:链接命令的输出是:

clang++  -o Analysis.so -shared DataFile.o CR39DataFile.o
Undefined symbols for architecture x86_64:
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find(char const*, unsigned long, unsigned long) const", referenced from:
CR39DataFile::read_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in CR39DataFile.o
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find(char, unsigned long) const", referenced from:
CR39DataFile::trim(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in CR39DataFile.o
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(char const*) const", referenced from:
CR39DataFile::read_thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in CR39DataFile.o …
Run Code Online (Sandbox Code Playgroud)

c++ macos clang clang++

27
推荐指数
1
解决办法
3万
查看次数

alignof(T) with T=__m512 不等于 alignof(__m512)

我遇到了一个奇怪的情况,alignof(__m512)它不等于std::alignment_of<__m512>::value由 Apple 的 clang 编译。经过一些测试,我发现当alignof(T)在模板中使用 进行评估时T=__m512,结果与直接不同alignof(__m512)。我还在 ubuntu(WSL) 上运行了几个由 g++ 和非 Apple 的 clang 编译的测试,并得到了正确的(我认为)行为。这是Apple的clang错误还是有关实施行为的问题?

#include <immintrin.h> //avx headers

#include <cstdio>
#include <typeinfo>
#include <type_traits>

void test_directly() {
  printf("directly: typeid %s alignof %zu\n", typeid(__m512).name(), alignof(__m512));
}

template<typename T>
void test_as_template_argument() {
  static_assert(std::is_same<T, __m512>::value, "assert");
  printf("template: typeid %s alignof %zu\n", typeid(T).name(), alignof(T));
}

int main() {
  test_directly();
  test_as_template_argument<__m512>();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(编译clang++ -std=c++17 -march=native):

directly: typeid Dv16_f alignof 64
template: …
Run Code Online (Sandbox Code Playgroud)

c++ clang++

27
推荐指数
1
解决办法
457
查看次数

运行 flutter linux 应用程序时出现“/usr/bin/ld: 找不到 -lstdc++: 没有这样的文件或目录”

flutter runLinux 桌面应用程序出现此错误

\n
Running "flutter pub get" in proj...            5.3s\nLaunching lib/main.dart on Linux in debug mode...\nCMake Error at /usr/share/cmake-3.22/Modules/CMakeTestCXXCompiler.cmake:62 (message):\n  The C++ compiler\n\n    "/usr/bin/clang++"\n\n  is not able to compile a simple test program.\n\n  It fails with the following output:\n\n    Change Dir: /media/kingbob/Dvolve/EData/proj/build/linux/x64/debug/CMakeFiles/CMakeTmp\n\n    Run Build Command(s):/usr/bin/ninja cmTC_5f1b6 && [1/2] Building CXX object CMakeFiles/cmTC_5f1b6.dir/testCXXCompiler.cxx.o\n    [2/2] Linking CXX executable cmTC_5f1b6\n    FAILED: cmTC_5f1b6 \n    : && /usr/bin/clang++   CMakeFiles/cmTC_5f1b6.dir/testCXXCompiler.cxx.o -o cmTC_5f1b6   && :\n    /usr/bin/ld: cannot find -lstdc++: No such file or directory\n    clang: …
Run Code Online (Sandbox Code Playgroud)

ubuntu clang++ flutter-linux

27
推荐指数
2
解决办法
2万
查看次数