标签: clang++

这是编译器错误还是我的代码?

这是一个示例代码:

#include <iostream>
#include <stdexcept>
#include <cstring>
#include <ctime>
#include <sstream>

using std::cout;
using std::endl;

std::size_t const BUF_SIZE(1000);

std::ostream& operator<<(std::ostream& os, std::tm const& rhs)
{   
    os << asctime(&rhs);
    return os; 
}   

std::istream& operator>>(std::istream& is, std::tm& rhs)
{   
    while (is.peek() == ' ' || is.peek() == '\t')
    {   
        is.get();
    }   
    std::streampos curPos = is.tellg();
    char buf[BUF_SIZE];
    is.getline(buf, BUF_SIZE);
    char* ptr = strptime(buf, "%D %T", &rhs);
    if (ptr == 0)
    {   
        throw std::runtime_error("strptime() failed!");
    }   
    std::size_t processed = ptr - buf;
    is.seekg(curPos …
Run Code Online (Sandbox Code Playgroud)

c++ g++ clang istream clang++

7
推荐指数
1
解决办法
383
查看次数

如何将非英语字符串写入文件并使用C++从该文件中读取?

我想写一个std::wstring文件,需要读取该内容std:wstring.当字符串为时,会发生这种情况L"<Any English letter>".但是当我们有像孟加拉语,卡纳达语,日语等字符,任何类型的非英语字母时,问题就出现了.试过各种选择,如:

  1. 转换std::wstringstd::string写入文件并将读取时间读取为std::string转换为std::wstring
    • 写作正在发生(我可以从edito看到),但阅读时间错误的角色
  2. 写入std::wstringwofstream,这对于母语字母也没有帮助 std::wstring data = L"?????? ?????????";

平台是mac和Linux,语言是C++

码:

bool
write_file(
    const char*         path,
    const std::wstring  data
) {
    bool status = false;
    try {
        std::wofstream file(path, std::ios::out|std::ios::trunc|std::ios::binary);
        if (file.is_open()) {
            //std::string data_str = convert_wstring_to_string(data);
            file.write(data.c_str(), (std::streamsize)data.size());
            file.close();
            status = true;
        }
    } catch (...) {
        std::cout<<"exception !"<<std::endl;
    }
    return status;
}


// Read Method

std::wstring
read_file(
    const char*  filename
) …
Run Code Online (Sandbox Code Playgroud)

c++ wifstream clang++ wofstream

7
推荐指数
1
解决办法
1278
查看次数

G ++&Clang ++ - 名称空间std _GLIBCXX_VISIBILITY(默认)

我正在尝试使用clang++冲突的命名空间来编译我的C++代码,但不断收到此错误.我的main.cpp文件是一个简单的Hello World程序(用于调试).

我有一种感觉问题是我在我的集​​群上编译的GCC或clang版本.关于如何追踪这个问题的任何想法?或者排除故障的步骤?

[aebrenne@hpc src]$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/data/apps/gcc/4.8.1/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ./configure --with-gmp=/data/apps/gmp/5.1.2 --with-mpfr=/data/apps/mpfr/3.1.2 --with-mpc=/data/apps/mpc-1.0.1 --enable-threads=posix --with-as=/data/apps/binutils/2.23.2/bin/as --mandir=/data/apps/gcc/4.8.1/man --pdfdir=/data/apps/gcc/4.8.1/pdf --htmldir=/data/apps/gcc/4.8.1/html --enable-languages=c,c++,fortran,ada,go,java,lto,objc,obj-c++ --prefix=/data/apps/gcc/4.8.1
Thread model: posix
gcc version 4.8.1 (GCC) 

[aebrenne@hpc src]$ clang++ --version
clang version 3.4 (trunk 193367)
Target: x86_64-unknown-linux-gnu
Thread model: posix
[aebrenne@hpc src]$ 


[aebrenne@hpc src]$ cat main.cpp 
#include <iostream>

int main() {
    std::cout << "Starting test..." << std::endl;

    return 0;
}
[aebrenne@hpc src]$ clang++ -std=c++11 -Wall -g -I/data/apps/gcc/4.8.1/include/c++/4.8.1  main.cpp 
In file …
Run Code Online (Sandbox Code Playgroud)

c++ gcc namespaces clang++

7
推荐指数
2
解决办法
6197
查看次数

模板模板参数和铿锵声

我有模板模板参数和clang的问题(可能是我的).以下玩具示例在g ++ 4.7.0下编译并运行,而不是clang ++ 3.0(基于LLVM 3.0),都是ubuntu 12.04.

玩具示例(test_1.cpp):

#include <iostream>                                                                                 
#include <memory>                                                                                   

struct AFn                                                                                          
{                                                                                                   
   void operator()()                                                                                
     {                                                                                              
    ; // do something                                                                               
     }                                                                                              
};                                                                                                  

template<typename T>                                                                                
  struct impl                                                                                       
{                                                                                                   
   T *backpointer_;                                                                                 
};                                                                                                  

template<typename S, template <typename> class T>                                                   
  struct implT                                                                                      
{                                                                                                   
   T<S> *backpointer_;                                                                              
};                                                                                                  

template<typename>                                                                                  
  class AClass;                                                                                     

template<>                                                                                          
  struct implT<AFn, AClass>                                                                         
{                                                                                                   
   implT(std::string message) :                                                                     
     message_(message)                                                                              
       {}                                                                                           

   void operator()()                                                                                
     {                                                                                              
    std::cout << " : " << message_ << std::endl;                                                    
     }                                                                                              

   std::string message_;                                                                            
};                                                                                                  


template<typename Fn>                                                                               
class AClass                                                                                        
{                                                                                                   
 private:                                                                                           
   std::shared_ptr<implT<Fn, …
Run Code Online (Sandbox Code Playgroud)

c++ templates clang clang++

7
推荐指数
1
解决办法
2302
查看次数

std :: stringstream的默认`fill character`是什么?

是实现定义还是标准建议流的默认填充字符?

示例代码:

#include <iostream>
#include <iomanip>
#include <sstream>

int main ()
{
    std::stringstream stream;
    stream << std::setw( 10 ) << 25 << std::endl;

    std::cout << stream.str() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

clang++ --stdlib=libstdc++

$ clang++ --stdlib=libstdc++ test.cpp
$ ./a.out | hexdump
0000000 20 20 20 20 20 20 20 20 32 35 0a 0a
000000c
$
Run Code Online (Sandbox Code Playgroud)

clang++ --stdlib=libc++

$ clang++ --stdlib=libc++ test.cpp
$ ./a.out | hexdump
0000000 ff ff ff ff ff ff ff ff 32 35 0a 0a
000000c …
Run Code Online (Sandbox Code Playgroud)

c++ stringstream setw clang++ libc++

7
推荐指数
1
解决办法
819
查看次数

ld:找不到架构x86_64的符号,clang:链接器命令失败

我正在尝试使用自制软件来下载和构建像boost,ceres-solver这样的软件包.会发生什么事情,我会尝试编译代码,没有任何特殊的标志(g++ foo.cpp -o foo -I /usr/local/...我也尝试过clang ++)并且我始终得到这个错误:

Undefined symbols for architecture x86_64:
  ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

所以我环顾四周,解决方案就是使用-stdlib=libstdc++旗帜.我试过了,现在它给了我与苹果发布旧版本的事实相关的错误libstdc++,并没有通过调用-std=c++11或修复-std=c++14.它引发了对像C++ 11语法的反对,比如shared_ptr:

/usr/local/include/ceres/internal/port.h:62:12: error: no member named
      'shared_ptr' in namespace 'std'
using std::shared_ptr;
      ~~~~~^
...
/usr/local/include/ceres/solver.h:629:15: error: expected member name or ';'
      after declaration specifiers
    shared_ptr<ParameterBlockOrdering> inner_iteration_ordering;
    ~~~~~~~~~~^
5 errors generated.
Run Code Online (Sandbox Code Playgroud)

如果我不需要,我宁愿不编辑库源代码,我希望开发人员做得很好吗?

有没有办法建立能够提供正确链接的库(有或没有自制软件)?目前我只是brew install <package> …

c++ macos homebrew c++11 clang++

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

在指针解除引用时返回对本地临时对象的引用

Clang编译器生成警告编译此代码片段,我无法弄清楚原因.

const int* Get() {
    static const int ARRAY[4] = {1, 2, 3, 4};
    return &ARRAY[0];
}

const int& Test() {
    const auto& p = Get();
    return (*p);
}

warning: returning reference to local temporary object [-Wreturn-stack-address] 
    return (*p);
Run Code Online (Sandbox Code Playgroud)

GCC没有显示此代码的警告.我可以修复这样的片段:const auto p = Get(); 但我想知道是否有一些临时对象,问题更深层次

c++ return reference compiler-warnings clang++

7
推荐指数
1
解决办法
962
查看次数

在C++中是否可以指定使用哪个删除操作符?

我正在检测一些代码,并注意到有了C++ 14的功能,有两个新的delete运算符(来自http://en.cppreference.com/w/cpp/memory/new/operator_delete):

这些是5-6)如果提供了用户定义的替换,则调用而不是(1-2),除了它的实现定义在删除不完整类型和数组的对象时是否调用(1-2)或(5-6)非类和易破坏的类类型(自C++ 17以来).标准库实现与(1-2)相同.

我已经超载了这些并且想要专门调用这两个.当我用gcc重载这两个时,我没有问题.使用clang ++我得到一个未定义的引用operator delete(void*)

这是代码

void* operator new(long unsigned int howMuch) {
    return reinterpret_cast<void*>(0xdeadbeef);
}

void* operator new[](long unsigned int howMuch) {
    return reinterpret_cast<void*>(0xdeadbeef);
}

void operator delete(void* what, long unsigned int howmuch) {
        if(what != reinterpret_cast<void*>(0xdeadbeef)) __builtin_trap();
        if(howmuch != 1) __builtin_trap();
}

extern "C"
void _start() {
    delete new char;
    asm("syscall" : : "a"(60) : ); 
}
Run Code Online (Sandbox Code Playgroud)

用gcc编译:g++ -ggdb -std=c++14 -nostdlib -fno-builtin -fno-exceptions 1.cc没有问题,运行正常.

用llvm/clang可以做到这一点吗?

c++ clang++ c++14

7
推荐指数
1
解决办法
468
查看次数

模板模板部分特化仅与-std = c ++ 1z一起使用g ++

我发现以下一段代码:

#include <iostream>
#include <vector>

template <typename T>
struct X : std::false_type {};

template <template <typename> class Y, typename U>
struct X<Y<U>> : std::true_type {};

int main() {
  if (X<int>())
    std::cout << "wrong\n";

  if (X<std::vector<double>>())
    std::cout << "correct\n";

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

correct在使用g++-7with 编译时打印-std=c++1z.其它版本g++,clang++或者其他std标志不能产生正确的.

这是当前实现的错误,并且此代码不应该打印任何内容,或者是否在C++ 17中发生了变化,这使得此代码按预期工作?

c++ templates g++ clang++ c++17

7
推荐指数
1
解决办法
181
查看次数

可变参数模板参数推导 - 最近的铿锵声中的奇怪错误和段错误

以下代码剪切产生错误消息和随后的clang 5.0.0和当前分支的段错误.它适用于任何符合c ++ 11标准的g ++.

#include <initializer_list>

template <typename... T> struct B {};
template <typename T> struct gf {};
template <typename... A> B<A...> make_B(std::initializer_list<gf<A...>> const &V) { return {}; }

int main() {
  auto x = gf<int>{};
  auto b = make_B<int>({x, x, x}); // clang segfault
  //auto b = make_B({x, x, x}); // ok
}
Run Code Online (Sandbox Code Playgroud)

错误消息显示

test.cpp:5:26: error: too many template arguments for class template 'gf'
template <typename... A> B<A...> make_B(std::initializer_list<gf<A...>> const &V) { return {}; }
                                               ^ …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++11 clang++

7
推荐指数
0
解决办法
167
查看次数