2016-05-31 25 views
11

Bugün bazı zaman fonksiyonları ile çalışıyordum ve %r (veya %p) kullanılarak yapılan standart dönüşümün g ++ veya clang ++ üzerinde std::get_time() aracılığıyla giriş için işe yaramadığını fark ettim. G ++ ve clang ++ için this live code version'a bakın. ,'un Windows altında VC++ ile beklendiği gibi çalıştığı görünmektedir (bkz. Bu closely related question). Ayrıca, etkinin imbue satırının dahil olup olmadığını da unutmayın. Linux makinemdeki yerel ayar, önemliyse "en_US.UTF-8" olarak ayarlanmıştır. yorumlayanlar işaret gibistd :: get_time g ++ ve clang ++ içinde mi bozuk?

#include <iostream> 
#include <iomanip> 
#include <sstream> 
#include <string> 
#include <ctime> 

int main(){ 
    std::tm t{}; 
    std::stringstream ss{"1:23:45 PM"}; 
    ss.imbue(std::locale(std::cin.getloc(), 
      new std::time_get_byname<char>("en_US"))); 
    ss >> std::get_time(&t, "%r"); 
    if (ss.fail()) { 
     std::cout << "Conversion failed\n" << std::put_time(&t, "%r") << '\n'; 
    } else { 
     std::cout << std::put_time(&t, "%r") << '\n'; 
    } 
} 
+8

Bu bir libstdC++ sorunu gibi görünüyor. libC++ ile clang bu güzel ayrıştırır. –

+0

@HowardHinnant: Haklısınız (http://coliru.stacked-crooked.com/a/e597ffb8e4d4497e). Soruyu geri almalı mıyım? – Edward

+0

[application] (https://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/include/bits/locale_facets_nonio.tcc?revision=219012&view=markup&pathrev=219013#l654 gibi görünüyor) "% r" veya "% p" işlemez. Ele alınması gereken başka bir yer varsa, onu bulamıyorum. – interjay

cevap

10

, bu aslında libstdc++ bir hata (bir ihmal) 'dir. Bir bug report gönderildi.

İlgili konular