1// Copyright (C) 2003, 2009 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 3, 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 COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// 22.2.5.3.1 time_put members 19 20// { dg-require-time "" } 21 22#include <locale> 23#include <sstream> 24#include <ctime> 25#include <cstring> 26#include <testsuite_hooks.h> 27 28class TP : public std::time_put<char> 29{ 30public: 31 mutable std::string fill_chars; 32 33protected: 34 iter_type do_put(iter_type s, std::ios_base&, char_type fill, 35 const std::tm*, char, char) const 36 { 37 fill_chars.push_back(fill); 38 return s; 39 } 40}; 41 42// libstdc++/12439 43// time_put::put doesn't pass fill character to do_put 44void test01() 45{ 46 using namespace std; 47 bool test __attribute__((unused)) = true; 48 49 ostringstream stream; 50 time_t tt = time(NULL); 51 52 const char* fmt = "%c"; 53 54 TP tp; 55 tp.put(TP::iter_type(stream), stream, 'W', localtime(&tt), 56 fmt, fmt + strlen(fmt)); 57 VERIFY( !tp.fill_chars.empty() ); 58 VERIFY( tp.fill_chars[tp.fill_chars.length() - 1] == 'W' ); 59} 60 61int main() 62{ 63 test01(); 64 return 0; 65} 66