1// Copyright (C) 2003 Free Software Foundation 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 2, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING. If not, write to the Free 16// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 17// USA. 18 19// 22.2.5.3.1 time_put members 20 21#include <locale> 22#include <sstream> 23#include <ctime> 24#include <cstring> 25#include <testsuite_hooks.h> 26 27class TP : public std::time_put<char> 28{ 29public: 30 mutable std::string fill_chars; 31 32protected: 33 iter_type do_put(iter_type s, std::ios_base&, char_type fill, 34 const std::tm*, char, char) const 35 { 36 fill_chars.push_back(fill); 37 return s; 38 } 39}; 40 41// libstdc++/12439 42// time_put::put doesn't pass fill character to do_put 43void test01() 44{ 45 using namespace std; 46 bool test __attribute__((unused)) = true; 47 48 ostringstream stream; 49 time_t tt = time(NULL); 50 51 const char* fmt = "%c"; 52 53 TP tp; 54 tp.put(TP::iter_type(stream), stream, 'W', localtime(&tt), 55 fmt, fmt + strlen(fmt)); 56 VERIFY( !tp.fill_chars.empty() ); 57 VERIFY( tp.fill_chars[tp.fill_chars.length() - 1] == 'W' ); 58} 59 60int main() 61{ 62 test01(); 63 return 0; 64} 65